全局设置和拆卸功能

时间:2013-02-24 00:46:56

标签: dart

通常情况下,您需要在每次测试后进行某种清理。例如,清理数据库。

问题:

使用unittest库时,有没有办法附加全局tearDown和setUp函数? 能够定义建议更好:

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

2 个答案:

答案 0 :(得分:1)

你可以手动完成,正如Gram暗示的那样:

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

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

    test('test', () {
      // ...
    });
  });
}

答案 1 :(得分:1)

当然,首先需要修复bug: - )

然后你会这样做,因为Justin说'使用非匿名函数,你可以明确地调用。在我看来,这是提供最大灵活性的最佳方式,而不会使单元测试库受到大量复杂的设置/拆卸逻辑的影响。

如果你想进行测试套件设置/拆卸,你可以在组中进行初始/最终“测试”:

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

这不是理想的,但它是一种解决方案。

值得指出的是,在内部,组实际上并不表示为层次结构。我们所做的只是保持与当前setUp / tearDown函数的堆栈,以便我们可以将每个测试用例与相应的测试用例相关联,并将组名和测试名称连接起来,以便为测试用例创建最终名称。我们没有构建一个树数据结构,所以我们没有一个好的方法来隐式地进行upcalls(我们可以动态创建一个上调一个级别的闭包,并将它们用作实际的setUp / tearDown函数,但这有点的fugly)。