テストのたびに何らかのクリーンアップを行う必要がある場合がよくあります。たとえば、データベースのクリーニング。
質問:
unittest ライブラリを使用するときに、グローバルな tearDown および setUp 関数をアタッチする方法はありますか? アドバイスの周りを定義できるとさらに良いでしょう:
unittest.around((test){
//doing setup
test();
//doing cleanup
});
テストのたびに何らかのクリーンアップを行う必要がある場合がよくあります。たとえば、データベースのクリーニング。
質問:
unittest ライブラリを使用するときに、グローバルな tearDown および setUp 関数をアタッチする方法はありますか? アドバイスの周りを定義できるとさらに良いでしょう:
unittest.around((test){
//doing setup
test();
//doing cleanup
});
Gramがバグでほのめかしているように、手動で行うことができます。
main() {
topSetup() {
// ...
}
setUp(topSetup);
group('group', () {
setUp(() {
topSetup();
// ...
});
test('test', () {
// ...
});
});
}
もちろん、まずバグを修正する必要があります:-)
次に、ジャスティンが言うように、明示的にアップコールできる非匿名関数を使用してこれを行います。これは、多くの複雑なセットアップ/ティアダウン ロジックでユニット テスト ライブラリに負担をかけることなく、最大限の柔軟性を提供する最良の方法であると私には思えました。
テスト スイートのセットアップ/分解を行いたい場合は、グループ内の初期/最終の「テスト」を使用して実行できます。
group('test suite', () {
test('Set up suite', () { ... });
test('Test 1', () { ... });
...
test('Test n', () { ... });
test('Tear down suite', () { ... });
});
理想的ではありませんが、解決策です。
内部的には、グループは実際には階層として表されていないことに注意してください。実際に行っていることは、現在の setUp/tearDown 関数でスタックを保持して、各テスト ケースを適切なケースに関連付け、グループ名とテスト名を連結してテスト ケースの最終的な名前を作成することだけです。ツリー データ構造を構築していないため、暗黙的にアップコールを行う良い方法がありません (1 レベルをアップコールするクロージャをオンザフライで作成し、それらを実際の setUp/tearDown 関数として使用することもできますが、それは少し手間がかかります)。醜い)。