unitarias unitaria tutorial test pruebas prueba framework español ejercicios ejemplos ejemplo con java unit-testing junit

java - unitaria - ¿Cómo puedo especificar dependencias de prueba JUnit?



test en java (6)

En la biblioteca de diseño impulsada por el comportamiento jBehave hay una palabra clave GivenScenarios que importa una lista de escenarios que se ejecutan antes del escenario principal. Esto le da la oportunidad de definir dependencias y tener un punto de falla. El registro de jBehave le dirá si la prueba falla en las dependencias o en la sección del cuerpo principal.

Nuestro kit de herramientas tiene más de 15000 pruebas JUnit , y se sabe que muchas pruebas fallan si falla alguna otra prueba. Por ejemplo, si el método X.foo () utiliza la funcionalidad de Y.bar () y YTest.testBar () falla, entonces XTest.testFoo () también fallará. Obviamente, XTest.testFoo () también puede fallar debido a problemas específicos de X.foo ().

Si bien esto está bien y aún quiero que se ejecuten ambas pruebas, sería bueno si se pudiera anotar una dependencia de prueba con XTest.testFoo () apuntando a YTest.testBar (). De esta manera, uno podría ver inmediatamente qué funcionalidad utilizada por X.foo () también está fallando, y qué no.

¿Hay tal anotación disponible en JUnit o en otro lugar? Algo como:

public XTest { @Test @DependsOn(method=org.example.tests.YTest#testBar) public void testFoo() { // Assert.something(); } }




org.junit.FixMethodOrder

@FixMethodOrder (MethodSorters.NAME_ASCENDING) Esto va en la parte superior de su clase de prueba de la Unidad.

Puede nombrar sus métodos public void step1_methodName, etc.


JExample y TestNG tienen algo así.

No sé qué tan útil es, pero si lo intenta, vuelva para decirnos si fue útil.


Realmente no hay algo como esto de lo que sea consciente. (Editar: aprendes algo nuevo todos los días :)) En mi opinión, esto no es tan malo (aunque puedo ver que es útil, especialmente cuando se usa para otras formas de pruebas automatizadas, por ejemplo, integración pruebas). Sus pruebas, IMO, no están en el sentido más estricto de la palabra "pruebas unitarias" (al menos no la prueba para X#foo() ). Las pruebas para X#foo() deberían tener éxito o fallar, dependiendo solo de la implementación de X#foo() . No debería depender de Y#foo() .

Lo que haría en su posición es burlarse de Y, implementar algo como MockY#foo() con un comportamiento muy simple y controlado, y usarlo en las pruebas de X#foo() .

Dicho esto, con 15,000 pruebas, puedo ver cómo sería un gran esfuerzo refactorizar. :)