2013-08-26 24 views
11

我正在寫一些Dart庫,並希望它有單元測試。我創建了目錄test,並希望將我的測試放在這裏。因爲我要進行很多測試,所以我希望將它們分成多個文件。我的問題是,什麼是Dart公約,如何做到這一點。我想讓我的測試輕鬆運行,但是,我也希望能夠運行一個測試文件。如何在多個文件中編寫飛鏢中的多個unittests?

您有什麼建議?

回答

13

將測試分爲多個文件是很常見的。我包括一個如何做到這一點的例子。

想象一下,您有兩個文件,包含測試,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中,可以使用導入語法來獲取已聲明庫的內容。

這就是我組織大部分測試的方式。

+0

這太棒了,謝謝! – JesterXL

1

有一個工具可以完全做到這一點,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頁面。