2011-12-08 10 views
15

Dart non sembra avere ancora un framework di test unitario dedicato. Qual è l'approccio migliore per scrivere ed eseguire unit test?Qual è il modo migliore per scrivere unit-test in Dart?

Ci sono alcuni esempi molto basso livello di codice sorgente Dart (ad esempio \ test \ corelib \ src \ ListTest.dart), in questo modo:

class ListTest { 

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

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

main() { 
    ListTest.testMain(); 
} 

È questo il modo consigliato di scrivere test in Dart o c'è qualche sforzo per renderlo più facile con alcune librerie di test unitari, come x-unit?

Esiste un modo semplice per eseguire tutti i test di unità scritti in questo modo e vedere i risultati?

+0

Poiché il pacchetto unittest è ora disponibile, è possibile modificare la risposta accettata ad Antony di seguito. –

risposta

13

I test unitari in Dart sono ancora in fase di sviluppo. Noi (gli autori di Dart) usiamo attualmente uno script python (tools/test.py) per eseguire tutti i nostri test. Lo script scorre attraverso le directory predefinite, cerca i file che terminano con "Test", li esegue e li confronta con il risultato previsto.

Alcuni giorni fa è stata inviata una prima versione di test.dart (l'equivalente in Dart). Nel prossimo futuro passeremo da tools/test.py a tools/test.dart per eseguire tutti i nostri test.

Se stai scrivendo un grande progetto potresti riutilizzare il nostro framework di test. Lo stiamo usando quotidianamente ed è piuttosto stabile. Per i progetti più piccoli, il tempo dedicato all'apprendimento del framework potrebbe non valerne la pena. Inoltre non sarei sorpreso se ci fossero (o lo saranno) altri framework di test.

Il ListTest della tua domanda è stato scritto molto presto, quando le funzioni di livello superiore non erano ancora disponibili. Da allora è stato modificato (aggiungendo la funzione principale) ma non scriveremmo più il test in questo modo. A meno che non sia necessario, non creiamo classi nei nostri casi di test. Vedere, ad esempio, here per un test più recente.

Modifica: esiste anche un framework di test unitario nel client/testing/unittest /. Vedere here per un test utilizzando questo framework. Questo ha anche il vantaggio che viene eseguito nel browser.

+0

Aggiungo che anche l'unittest supporta anche l'esecuzione nella VM autonoma e in cima al nodo/nodo ora. – munificent

+2

questa risposta è un po 'datata ora. c'è una biblioteca unittest nella punta del tronco ora. –

5

This post da "Adam Coding" (tramite G +) fornisce una descrizione molto dettagliata dello stato corrente del test dell'unità di freccette, con belle schermate della visualizzazione del browser dei test dell'unità.

7

dartlang.org ha un lunghissimo articolo sulla current state of unit testing in dart. La documentazione API può essere trovata 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

Utilizzare la prova Dart pacchetto https://pub.dartlang.org/packages/test

Questo pacchetto è stato precedentemente nominato unittest che ora è deprecato, ma si potrebbe incontrare vecchi articoli su di esso. Dovrebbero essere scritti nuovi test per il pacchetto "test".

I test possono essere eseguiti manualmente (come qualsiasi altro programma Dart) o utilizzando pub (che può eseguire test singoli o più test trovati in una directory).

Problemi correlati