3

テストのたびに何らかのクリーンアップを行う必要がある場合がよくあります。たとえば、データベースのクリーニング。

質問:

unittest ライブラリを使用するときに、グローバルな tearDown および setUp 関数をアタッチする方法はありますか? アドバイスの周りを定義できるとさらに良いでしょう:

unittest.around((test){
  //doing setup
  test();
  //doing cleanup
});
4

2 に答える 2

1

Gramがバグでほのめかしているように、手動で行うことができます。

main() {
  topSetup() {
    // ...
  }
  setUp(topSetup);

  group('group', () {
    setUp(() {
      topSetup();
      // ...
    });

    test('test', () {
      // ...
    });
  });
}
于 2013-02-26T22:46:51.290 に答える
1

もちろん、まずバグを修正する必要があります:-)

次に、ジャスティンが言うように、明示的にアップコールできる非匿名関数を使用してこれを行います。これは、多くの複雑なセットアップ/ティアダウン ロジックでユニット テスト ライブラリに負担をかけることなく、最大限の柔軟性を提供する最良の方法であると私には思えました。

テスト スイートのセットアップ/分解を行いたい場合は、グループ内の初期/最終の「テスト」を使用して実行できます。

group('test suite', () {
  test('Set up suite', () { ... });
  test('Test 1', () { ... });
  ...
  test('Test n', () { ... });
  test('Tear down suite', () { ... });
});

理想的ではありませんが、解決策です。

内部的には、グループは実際には階層として表されていないことに注意してください。実際に行っていることは、現在の setUp/tearDown 関数でスタックを保持して、各テスト ケースを適切なケースに関連付け、グループ名とテスト名を連結してテスト ケースの最終的な名前を作成することだけです。ツリー データ構造を構築していないため、暗黙的にアップコールを行う良い方法がありません (1 レベルをアップコールするクロージャをオンザフライで作成し、それらを実際の setUp/tearDown 関数として使用することもできますが、それは少し手間がかかります)。醜い)。

于 2013-02-27T01:41:54.637 に答える