2011-12-08 15 views
15

Dart aún no parece tener un marco de pruebas de unidades dedicado. ¿Cuál es el mejor enfoque para escribir y ejecutar pruebas unitarias?¿Cuál es la mejor manera de escribir pruebas unitarias en Dart?

Hay algunos ejemplos de muy bajo nivel en el código fuente de dardo (por ejemplo, \ Ensayos \ corelib \ src \ ListTest.dart), así:

class ListTest { 

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

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

main() { 
    ListTest.testMain(); 
} 

¿Es esta la forma recomendada para escribir pruebas en DART , o hay algún esfuerzo para hacerlo más fácil con alguna biblioteca de pruebas de unidades, como x-unit?

¿Hay alguna manera fácil de ejecutar todas las pruebas unitarias escritas de esta manera y ver los resultados?

+0

Como el paquete unittest ya está disponible, ¿podría cambiar la respuesta aceptada por Antony's a continuación? –

Respuesta

13

Pruebas unitarias en Dart aún están en desarrollo. Nosotros (los autores de Dart) actualmente usamos un script de python (tools/test.py) para ejecutar todas nuestras pruebas. La secuencia de comandos se ejecuta a través de directorios predefinidos, busca los archivos que terminan con 'Prueba', los ejecuta y los compara con el resultado esperado.

Hace varios días, se envió una primera versión de test.dart (el equivalente en Dart). En un futuro próximo cambiaremos de tools/test.py a tools/test.dart para ejecutar todas nuestras pruebas.

Si está escribiendo un gran proyecto, podría reutilizar nuestro marco de prueba. Lo estamos usando a diario y es bastante estable. Para proyectos más pequeños, el tiempo invertido en aprender el marco podría no valer la pena. Además, no me sorprendería si hay (o habrá) otros marcos de prueba.

La prueba de la lista de su pregunta se ha escrito muy temprano, cuando las funciones de nivel superior aún no estaban disponibles. Desde entonces se ha modificado (agregando la función principal) pero ya no escribiríamos la prueba de esta manera. A menos que sea necesario, no creamos clases en nuestros casos de prueba. Ver, por ejemplo, here para una prueba más reciente.

Editar: También hay un marco de pruebas unitarias en client/testing/unittest /. Vea here para una prueba usando este marco. Este también tiene la ventaja de que se ejecuta en el navegador.

+0

Voy a agregar que unittest también es compatible con ejecutar en la máquina virtual independiente y en la parte superior de rana/nodo ahora también. – munificent

+2

esta respuesta es un poco anticuada ahora. hay una biblioteca unittest en la punta del tronco ahora. –

5

This post de "Adam Coding" (a través de G +) ofrece una descripción muy detallada del estado actual de las pruebas de unidad de dardos, con bonitas capturas de pantalla de la vista en el navegador de las pruebas unitarias.

7

dartlang.org tiene un muy largo artículo sobre el current state of unit testing in dart. La documentación de la API se puede encontrar en 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

Use la prueba de dardo paquete https://pub.dartlang.org/packages/test

Este paquete fue nombrado previamente unittest que ahora está en desuso, pero puede llegar a través viejos artículos sobre el tema. Se deben escribir nuevas pruebas para el paquete "prueba".

Las pruebas se pueden ejecutar de forma manual (como cualquier otro programa Dart), o utilizando pub (que puede ejecutar pruebas individuales o múltiples pruebas encontradas en un directorio).

Cuestiones relacionadas