Tengo mi marco de trabajo existente creado con Jfunc, que proporciona la posibilidad de continuar con la ejecución incluso cuando falla una de las afirmaciones en el caso de prueba. Jfunc usa el framework junit 3.x. Pero ahora estamos migrando a junit4, así que ya no puedo usar Jfunc y lo he reemplazado con junit 4.10 jar.
Ahora el problema es que hemos usado extensamente jfunc en nuestro framework, y con junit 4 queremos que nuestro código continúe la ejecución incluso cuando uno de los argumentos falla en un caso de prueba.
¿Alguien tiene alguna sugerencia/idea para esto, sé que en junio las pruebas deben ser más atómicas, es decir, una afirmación por caso de prueba, pero no podemos hacer eso en nuestro marco por alguna razón.Continuación de la ejecución de la prueba en junit4 incluso cuando una de las afirmaciones falla
Respuesta
Puede hacerlo utilizando una regla ErrorCollector.
Para usarlo, primero añadir la regla como un campo en su clase de prueba:
public class MyTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
//...tests...
}
luego vuelva a colocar el afirma con llamadas a collector.checkThat(...)
.
p. Ej.
@Test
public void myTest() {
collector.checkThat("a", equalTo("b"));
collector.checkThat(1, equalTo(2));
}
Uso el ErrorCollector también, pero también uso assertThat y colóquelos en un bloque try catch.
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@Rule
public ErrorCollector collector = new ErrorCollector();
@Test
public void calculatedValueShouldEqualExpected() {
try {
assertThat(calculatedValue(), is(expected));
} catch (Throwable t) {
collector.addError(t);
// do something
}
}
Utilice los bloques try/finally. Esto funcionó en mi caso:
...
try {
assert(...)
} finally {
// code to be executed after assert
}
...
¿Te das cuenta de que esta pregunta se publicó hace 2 años y ya hay una respuesta aceptada? –
@TheJuniorProgrammer solo una nota general, este sitio no es solo acerca de las respuestas aceptadas. El objetivo es ayudar a los usuarios que buscan respuestas a encontrar una solución a un problema.A veces hay múltiples enfoques para resolver un problema, y algunas veces lo que funciona para una persona puede no funcionar tan bien para otra. – nomistic
@nomistic bien, es suficiente. –
También puede utilizar assertj - soft assertion
@Test
public void testCollectErrors(){
SoftAssertions softly = new SoftAssertions();
softly.assertThat(true).isFalse();
softly.assertThat(false).isTrue();
// Don't forget to call SoftAssertions global verification !
softly.assertAll();
}
También existe otra manera de utilizarlo sin invocar manualmente softly.assertAll();
- 1. NUnit: La ejecución de varias afirmaciones en una sola prueba
- 2. Prueba de Android JUnit4
- 3. ¿Las afirmaciones múltiples son malas en una prueba unitaria? Incluso si encadena?
- 4. ¿Cómo evitar las afirmaciones múltiples en una prueba JUnit?
- 5. ¿Cómo llamar a ipdb cuando falla una prueba en la prueba de django?
- 6. Ant éxito incluso cuando la tarea Ant falla
- 7. Finalizar NSTask incluso si la aplicación falla
- 8. JUnit prueba una falla en la base de datos?
- 9. Junit4 - Limpieza en tiempo de espera de prueba
- 10. ¿Por qué falla esta prueba de unidad cuando se prueba la igualdad de DateTime?
- 11. la ejecución de una prueba en el servidor SQL 2005
- 12. Jenkins tiene éxito cuando la prueba de la unidad falla (Rails)
- 13. La ejecución de un subproceso falla
- 14. ¿Dónde poner las afirmaciones?
- 15. Falla de la ejecución org.apache.maven.plugins objetivo
- 16. Prueba de implementaciones de múltiples interfaces con las mismas pruebas: JUnit4
- 17. Si yo ignoro una clase de prueba en JUnit4, ¿@BeforeClass aún se ejecuta?
- 18. ¿Hay demasiadas afirmaciones en esta prueba unitaria?
- 19. continuación de la ejecución después de que se lanza una excepción en java
- 20. La accesibilidad a veces falla, incluso cuando tenemos una conexión a Internet
- 21. Junit4: Ejecutando un conjunto de métodos de prueba particulares
- 22. Cómo acelerar la ejecución de la prueba de grails
- 23. Prueba de la unidad Drupal con DrupalUnitTestCase falla en la configuración de la base de datos
- 24. Controlando las Afirmaciones de Java - Mejores Prácticas
- 25. prueba falla
- 26. clojure read-line falla dentro de la prueba de Leiningen
- 27. ¿Cómo obtener el nombre del método de prueba de la unidad en tiempo de ejecución dentro de la prueba unitaria?
- 28. initializationError con Eclipse y junit4 al ejecutar una sola prueba
- 29. Dado cuando a continuación, las pruebas: ¿NECESITO un "cuándo"?
- 30. La prueba NUnit falla debido a System.AccessViolationException
Gracias por la respuesta a Chris. Funcionó y continuó después de la primera falla (es decir, collector.checkThat (10, CoreMatchers.equalTo (11))). Pero el problema es que lo quiero marcar la prueba como fallida incluso si falla una de las comprobaciones. Actualmente, después de ejecutar la prueba anterior, la prueba se marca como aprobada. Quiero que falle y mostrar la pila en la línea de falla (algo similar a cuando falla una afirmación). – user85
Eso es extraño. Acabo de probar el código que escribí en mi respuesta, y funcionó como se esperaba. La prueba falla e imprime la traza de pila de cada afirmación anómala. Aquí está el código de prueba completo y la salida que obtuve, ejecutando la prueba de IntelliJ: https://gist.github.com/2419626 –
Oh ... es malo, me olvido de agregar la regla y causó todo el caos ... perdón por la confusión y mucho por la publicación. – user85