2012-06-21 12 views
7

El escenario es el siguiente:registro adicional JBehave

Estamos utilizando JBehave y selenio para el sistema, la integración y las pruebas de extremo a extremo. Estoy verificando los resultados de un cálculo en una página con más de 20 valores para validar. Usando Junit Assert, la prueba completa fallará en la primera instancia de uno de los valores siendo incorrecto. Lo que quería hacer era que si se cumple una falla de aserción, entonces la prueba continúa ejecutándose, de manera que pueda cotejar todos los valores que son incorrectos en una ejecución de prueba en lugar de múltiples ejecuciones de prueba.

Para hacer esto, capturo las aserciones y escribo en un archivo de registro todo lo que falla la validación. Esto me ha dejado un par de problemas:

1) El archivo de registro donde escribo las fallas de las afirmaciones no contiene el nombre de JBehave Story o Escenario que se estaba ejecutando cuando se produjo la excepción.

2) La historia o escenario de JBehave aparece como 'Aprobado' y quiero que aparezca como 'Fallido'.

¿Hay alguna manera de que pueda registrar el nombre de la historia y el escenario en el archivo de registro adicional O bien, obtener el registro adicional escrito en el archivo de registro JBehave?

¿Cómo puedo obtener la historia/escenario marcado como fallido?

En la configuración JBehave tengo:

configuredEmbedder() 
    .embedderControls() 
    .doIgnoreFailureInStories(true) 
    .doIgnoreFailureInView(false) 
    .doVerboseFailures(true) 
    .useStoryTimeoutInSecs(appSet.getMaxRunningTime()); 

y

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
    .withDefaultFormats() 
    .withViewResources(viewResources) 
    .withFormats(Format.HTML, Format.CONSOLE) 
    .withFailureTrace(true) 
    .withFailureTraceCompression(true) 
    .withRelativeDirectory("jbehave/" + appSet.getApplication()) 

Respuesta

11

Sí, usted puede crear su propia StoryReporter:

public class MyStoryReporter implements org.jbehave.core.reporters.StoryReporter{ 
    private Log log = ... 

    @Override 
    public void successful(String step) { 
     log.info(">>successStep:" + step); 
    } 

    @Override 
    public void failed(String step, Throwable cause) { 
     log.error(">>error:" + step + ", reason:" + cause); 
    } 

    ... 
} 

y registrarlo como esto:

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
     .withReporters(new MyStoryReporter()) 
.. 
+0

Gracias. Eso fue realmente útil. –

+0

¿Puede agregar más información sobre cómo creamos los registradores? Explique: registro de registro privado = ... – farheen

+0

Depende de qué marco de registro está utilizando. Si está utilizando slf4j: 'Logger log = LoggerFactory.getLogger (MyStoryReporter.class);'. El punto principal es que podría ser cualquier cosa en esos métodos de devolución de llamada. Podría hacer un sysout, escribir en una base de datos o cualquier cosa. – plasma147

Cuestiones relacionadas