Escribo la extensión JUnit5. Pero no puedo encontrar la manera de obtener el resultado de la prueba.
La extensión se ve así:
import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.TestExtensionContext; public class TestResultExtension implements AfterTestExecutionCallback { @Override public void afterTestExecution(TestExtensionContext context) throws Exception { //How to get test result? SUCCESS/FAILED } }¿Alguna pista sobre cómo obtener el resultado de la prueba?
Como señalan otras respuestas, JUnit comunica las pruebas fallidas con excepciones , por lo que se puede usar AfterTestExecutionCallback para aclarar lo que sucedió . Tenga en cuenta que esto es propenso a errores, ya que la extensión que se ejecute más tarde aún podría fallar en la prueba.
Otra forma de hacerlo es registrar un TestExecutionListener personalizado . Sin embargo, ambos enfoques son un poco indirectos. Hay un problema que rastrea un punto de extensión específico para reaccionar a los resultados de la prueba , lo que probablemente sería la respuesta más directa a su pregunta. Si puede proporcionar un caso de uso específico, sería genial si pudiera dirigirse al n. ° 542 y dejar un comentario que lo describa.
Este trabajo para mí:
public class RunnerExtension implements AfterTestExecutionCallback { @Override public void afterTestExecution(ExtensionContext context) throws Exception { Boolean testResult = context.getExecutionException().isPresent(); System.out.println(testResult); //false - SUCCESS, true - FAILED } } @ExtendWith(RunnerExtension.class) public abstract class Tests { }Puede usar SummaryGeneratingListener desde org.junit.platform.launcher.listeners
Contiene el campo MutableTestExecutionSummary , que implementa la interfaz TestExecutionSummary , y de esta manera puede obtener información sobre contenedores, pruebas, tiempo, fallas, etc.
Puede crear un oyente personalizado, por ejemplo:
SummaryGeneratingListenerpublic class ResultAnalyzer extends SummaryGeneratingListener { @Override public void testPlanExecutionFinished(TestPlan testPlan) { //This method is invoked after all tests in all containers is finished super.testPlanExecutionFinished(testPlan); analyzeResult(); } private void analyzeResult() { var summary = getSummary(); var failures = summary.getFailures(); //Do something } }
src\main\resources\META-INF\services\org.junit.platform.launcher.TestExecutionListener
y especifique su implementación en él
ruta.a.clase.ResultAnalyzer
-Djunit.jupiter.extensiones.autodetección.habilitado=verdadero
¡Y eso es!
Documentos
https://junit.org/junit5/docs/current/user-guide/#extensions-registration-automatic