问题 如何在dart中多个文件中编写多个单元测试?


我正在写一些Dart库,并想让它单元测试。我创建了目录 test 并希望将我的测试放在这里。因为我将要进行大量测试,所以我希望将它们分成多个文件。我的问题是,Dart惯例是什么,如何做到这一点。我希望我的测试能够轻松运行,但是,我还希望能够只运行一个测试文件。

你有什么建议?


4500
2017-08-26 15:52


起源



答案:


将测试分成多个文件是很常见的。我举了一个如何做到这一点的例子。

想象一下,你有两个带有测试的文件,foo_test.dart,bar_test.dart,它们包含你程序的测试。 foo_test.dart看起来像这样:

library foo_test;

import 'package:unittest/unittest.dart';

void main() {
  test('foo test', () {
    expect("foo".length, equals(3));
  });
}

bar_test.dart看起来像这样:

library bar_test;

import 'package:unittest/unittest.dart';

void main() {
  test('bar test', () {
    expect("bar".length, equals(3));
  });
}

您可以运行任一文件,并执行该文件中包含的测试。

我会创建类似于all_tests.dart文件的东西,它会从foo_test.dart和bar_test.dart导入测试。以下是all_tests.dart的样子:

import 'foo_test.dart' as foo_test;
import 'bar_test.dart' as bar_test;

void main() {
  foo_test.main();
  bar_test.main();
}

如果执行了all_tests.dart,则执行foo_test.dart和bar_test.dart中的测试。

有一点需要注意:要使所有这些工作,您需要将foo_test.dart和bar_test.dart声明为库(请参阅每个文件的第一行)。然后,在all_tests.dart中,您可以使用导入语法来获取声明的库的内容。

这就是我组织大部分测试的方式。


13
2017-08-26 21:30



这太棒了,谢谢! - JesterXL


答案:


将测试分成多个文件是很常见的。我举了一个如何做到这一点的例子。

想象一下,你有两个带有测试的文件,foo_test.dart,bar_test.dart,它们包含你程序的测试。 foo_test.dart看起来像这样:

library foo_test;

import 'package:unittest/unittest.dart';

void main() {
  test('foo test', () {
    expect("foo".length, equals(3));
  });
}

bar_test.dart看起来像这样:

library bar_test;

import 'package:unittest/unittest.dart';

void main() {
  test('bar test', () {
    expect("bar".length, equals(3));
  });
}

您可以运行任一文件,并执行该文件中包含的测试。

我会创建类似于all_tests.dart文件的东西,它会从foo_test.dart和bar_test.dart导入测试。以下是all_tests.dart的样子:

import 'foo_test.dart' as foo_test;
import 'bar_test.dart' as bar_test;

void main() {
  foo_test.main();
  bar_test.main();
}

如果执行了all_tests.dart,则执行foo_test.dart和bar_test.dart中的测试。

有一点需要注意:要使所有这些工作,您需要将foo_test.dart和bar_test.dart声明为库(请参阅每个文件的第一行)。然后,在all_tests.dart中,您可以使用导入语法来获取声明的库的内容。

这就是我组织大部分测试的方式。


13
2017-08-26 21:30



这太棒了,谢谢! - JesterXL


没有必要使用多个文件来隔离测试 - 请参阅 只运行一次测试 和 运行一组有限的测试

要隔离测试,请更改 test() 至 solo_test()

因此,您可以将所有测试放在同一个文件中(或分成几个部分)。


2
2017-08-26 16:08





有一个工具可以做到这一点, 飞镖测试跑步者。该页面的摘录:

Dart Test Runner将在正确的环境(VM或浏览器)中自动检测并运行Dart项目中的所有测试。

它会检测以后缀为的文件中写入的任何测试 _test.dart 你的测试代码在哪里 main() 功能。检测和运行没有任何问题 单元测试 试验。

它很容易安装并运行它。只需两个命令:

$ pub global activate test_runner
$ pub global run test_runner

有关更多选项,请检查 飞镖测试跑步者 页。


1
2018-02-08 17:57