2011-12-08 76 views
15

Dart似乎還沒有專門的單元測試框架。編寫和運行單元測試的最佳方法是什麼?在Dart中編寫單元測試的最佳方式是什麼?

有在DART源代碼一些非常低級的例子(如\測試\ corelib的的\ src \ ListTest.dart),像這樣:

class ListTest { 

    static testMain() { 
    testList(); 
    testExpandableList(); 
    } 

    static void testList() { ... } 
    static void testExpandableList() { ... } 
} 

main() { 
    ListTest.testMain(); 
} 

這是寫在DART測試的推薦方法或者是否有任何努力使x-unit等單元測試庫更容易?

有沒有一種簡單的方法如何運行所有用這種方式編寫的單元測試並查看結果?

+0

由於unittest包現在可用,您是否可以將接受的答案更改爲以下的Antony。 –

回答

13

飛鏢中的單元測試仍然在開發中。我們(Dart作者)目前使用python腳本(tools/test.py)來執行我們所有的測試。該腳本運行預定義的目錄,查找以「Test」結尾的文件,執行它們,並將它們與預期結果進行比較。

幾天前,第一個版本的test.dart(相當於Dart)已經提交。在不久的將來,我們將從tools/test.py切換到tools/test.dart來執行我們所有的測試。

如果你正在編寫一個大項目,你可以重用我們的測試框架。我們每天都在使用它,它非常穩定。對於較小的項目,花在學習框架上的時間可能不值得。如果存在(或將要)其他測試框架,我也不會感到驚訝。

您的問題中的ListTest寫得很早,當時頂級函數尚不可用。它已被修改(添加主函數),但我們不會再以這種方式編寫測試。除非需要,否則我們不會在測試用例中創建類。例如,請參閱here以獲得更新的測試。

編輯:在client/testing/unittest /中還有一個單元測試框架。請參閱here以使用此框架進行測試。這一個也有它在瀏覽器中運行的優點。

+0

我只是補充一點,unittest現在也支持在獨立虛擬機和青蛙/節點之上運行。 – munificent

+2

這個答案現在有點過時了。現在在主幹尖端有一個單元測試庫。 –

5

This post來自「Adam Coding」(通過G +)給出了飛鏢單元測試當前狀態的非常詳細的描述,以及單元測試的In-Browser視圖截圖。

7

dartlang.org有大約current state of unit testing in dart很長的文章。 API文檔可以在here找到。

import 'package:unittest/unittest.dart'; 

void main() { 
    test('QuickSort',() => 
    expect(QuickSort([5, 4, 3, 2, 1]), 
     orderedEquals([1, 2, 3, 4, 5])) 
); 
} 

int _Partition(List array, int left, int right, int pivotIndex) { 
    var pivotValue = array[pivotIndex]; 
    array[pivotIndex] = array[right]; 
    array[right] = pivotValue; 
    var storeIndex = left; 
    for (var i = left; i < right; i++) { 
    if (array[i] < pivotValue) { 
     var tmp = array[i]; 
     array[i] = array[storeIndex]; 
     array[storeIndex] = tmp; 
    } 
    } 
    var tmp = array[storeIndex]; 
    array[storeIndex] = array[right]; 
    array[right] = tmp; 
    return storeIndex; 
} 

void _QuickSort(List array, int left, int right) { 
    if (left < right) { 
    int pivotIndex = left + ((right-left)/2); 
    pivotIndex = _Partition(array, left, right, pivotIndex); 
    _QuickSort(array, left, pivotIndex-1); 
    _QuickSort(array, pivotIndex+1, right); 
    } 
} 

List QuickSort(List array) { 
    _QuickSort(array, 0, array.length-1); 
    return array; 
} 
2

使用測試飛鏢包https://pub.dartlang.org/packages/test

這個包以前命名unittest現在已不建議,但您可能會遇到老的文章了。應該爲「測試」包編寫新的測試。

測試可以手動運行(與其他Dart程序一樣),也可以使用pub(可運行個別測試或在目錄下發現的多個測試)。

相關問題