我正在寫一些Dart庫,並希望它有單元測試。我創建了目錄test
,並希望將我的測試放在這裏。因爲我要進行很多測試,所以我希望將它們分成多個文件。我的問題是,什麼是Dart公約,如何做到這一點。我想讓我的測試輕鬆運行,但是,我也希望能夠運行一個測試文件。如何在多個文件中編寫飛鏢中的多個unittests?
您有什麼建議?
我正在寫一些Dart庫,並希望它有單元測試。我創建了目錄test
,並希望將我的測試放在這裏。因爲我要進行很多測試,所以我希望將它們分成多個文件。我的問題是,什麼是Dart公約,如何做到這一點。我想讓我的測試輕鬆運行,但是,我也希望能夠運行一個測試文件。如何在多個文件中編寫飛鏢中的多個unittests?
您有什麼建議?
將測試分爲多個文件是很常見的。我包括一個如何做到這一點的例子。
想象一下,您有兩個文件,包含測試,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中,可以使用導入語法來獲取已聲明庫的內容。
這就是我組織大部分測試的方式。
不需要有多個文件來隔離測試 - 請參閱Running only a single test和Running a limited set of tests。
要隔離測試,請將
test()
更改爲solo_test()
。
所以你可以把所有的測試放在同一個文件中(或分成幾個部分)。
有一個工具可以完全做到這一點,Dart Test Runner。摘自該頁面的文章:
Dart Test Runner會在正確的環境(VM或瀏覽器)中自動檢測並運行Dart項目中的所有測試。
它檢測與_test.dart
後綴文件writen任何測試,其中測試代碼是main()
函數內。它沒有任何問題檢測和運行unittest測試。
安裝並運行它非常簡單。只需兩條命令:
$ pub global activate test_runner
$ pub global run test_runner
更多選項,請查看Dart Test Runner頁面。
這太棒了,謝謝! – JesterXL