Dart unittest过滤

时间:2013-01-17 20:48:43

标签: testing dart

我为我的一个Dart库编写了一套unittest,但我希望能够过滤那些只允许在我的连续构建过程中运行的那些。我注意到unittest api允许这样做但我找不到任何例子。

1 个答案:

答案 0 :(得分:2)

您可以通过创建自定义配置并使用filterTests()来过滤运行的测试。

import "package:unittest/unittest.dart";

class FilterTests extends Configuration {
  get autoStart => false; // this ensures that the tests won't just run automatically
}

void useFilteredTests() {
  configure(new FilterTests()); // tell configure to use our custom configuration
  ensureInitialized(); // needed to get the plumbing to work
}

然后,在main()中,您使用useFilterTests(),然后使用字符串或正则表达式为您要运行的测试调用filterTests()

void main() {
  useFilteredTests();

  // your tests go here

  filterTests(some_string_or_regexp);
  runTests();
}

其描述与filterTests()的参数匹配的测试将运行;其他测试不会。我使用filterTests()写了blog post,你可能觉得它很有用。

过滤测试的另一种方法是将它们分成多个库,然后import()main()函数,只有那些要运行其测试的库。 所以,想象一个包含一些测试的库:

library foo_tests;

import "package:unittest/unittest.dart";

void main() {
  // some tests for foo()
}

另一个包含其他测试:

library bar_tests;

import "package:unittest/unittest.dart";

void main() {
  // some tests for bar()
}

您可以通过从每个库中导入main()来组合测试运行器。在my_tests.dart中,您可以执行此操作来运行所有测试:

import "package:unittest/unittest.dart";
import "foo_tests.dart" as foo_tests;
import "bar_tests.dart" as bar_tests;

void main() {
  foo_tests.main();
  bar_tests.main();
}

如果您只想运行foo_tests或仅运行bar_tests,则只需导入一个。这将有效地创建一个过滤器。以下是simple working example这些导入的工作原理