2011-06-13 19 views
5

lo tanto, decir que estoy haciendo TDD y escribo una prueba como esta:TDD Estructura Pregunta de prueba

public void testDeposit() 
{ 
    Bank b = new Bank(); 
    b.deposit(100); 
    AssertEquals(100, b.balance); 
} 

Entonces vayan y hagan el paso de la prueba, pasar a la siguiente. Digamos que hago esto por unos pocos seguidos y obtengo depósitos, retiros y amortización, todo funciona.

Luego digo que quiero escribir una prueba que pruebe a alguien creando una cuenta y haciendo una combinación de todo. ¿No es esto técnicamente una prueba de integración, no una prueba de unidad? Si lo es, ¿esto encaja en TDD, o se supone que TDD solo consiste en pruebas unitarias.

Principalmente pregunto porque, si esta prueba se rompe, lo más probable es que una de las otras pruebas se rompa, y si no lo hacen, probablemente no las haya probado con la cantidad correcta de escenarios. Entonces, ¿debería tener pruebas de integración en el mismo dominio que las pruebas unitarias cuando se trata de TDD, o deberían estar escritas en otra clase/archivo en otro lugar y ejecutarse por separado?

+0

Otra forma de protegerlo ... sería TDD => unit tests => un comportamiento para un objeto a la vez. ATDD => escenario de pruebas => un escenario de usuario a la vez. – Gishu

Respuesta

4

Creo que las pruebas de alto nivel sin duda pueden tener un lugar como parte de un flujo de trabajo TDD. Por ejemplo, probar "afuera adentro" puede ser una manera muy efectiva de definir nuevas características. Comience con alguna prueba de aceptación del nivel de interfaz de usuario para la nueva característica, escriba pruebas de integración para los componentes que deberán existir para proporcionar esa característica, y escriba pruebas de unidades para impulsar la implementación de cada componente.

Creo que debe mantener clara la distinción entre sus tipos de pruebas y no mezclarlas, pero puede tener sentido incluirlas como parte de su proceso TDD.

+0

Eso tiene mucho sentido, sin embargo, ¿tomaría el enfoque de mantenerlos en el mismo archivo de prueba y simplemente separarlos por región (en .net), o crearía una carpeta separada (o incluso proyecto), por unidad/integración/pruebas de UI? – slandau

+0

Prefiero la convención de raíles de una prueba o directorio de especificaciones que contiene subdirectorios para cada tipo de prueba que a su vez contienen un archivo por clase o aspecto probado. P.ej. 'especificaciones/modelos/foo' o 'pruebas/integración/barra'. – Jonah

+0

Tiene sentido. Gracias hombre. – slandau

2

La línea entre las pruebas de integración y las pruebas unitarias puede ser un poco borrosa; vale la pena, mientras hace TDD, probar "hasta" un nivel de integración, solo para obtener la confirmación de la funcionalidad, pero sin duda es excesivo durante TDD para poner en marcha pruebas de integración "integrales" (tenga en cuenta las cotizaciones completas allí).

Básicamente, hay un aspecto importante de la "llamada de juicio" en curso; su experiencia debe ser una buena guía en cuanto al nivel apropiado para dejar de agregar pruebas durante el modo TDD.

+0

Así que, básicamente, es algo así como, probé un escenario lo suficientemente amplio aquí, vamos a ampliarlo más adelante y solo nos enfocamos en agregar más funcionalidades mientras hacemos algo para TDD. – slandau

+0

@slandau: sí, eso es más o menos; el punto es no empantanarse en los detalles de las pruebas excesivamente rigurosas durante el proceso de TDD; recuerde que es un proceso de desarrollo en primer lugar. Recuerde que ningún código, incluso el código TDD, está libre de errores; es un equilibrio entre la calidad del código y la productividad. –