2011-02-14 8 views
16

He definido el enlace [AfterScenario] en mi clase stepdefinition y tengo el método que se ejecutará después de cada escenario, pero por alguna razón esto no está funcionando. Mi método no se llama después de cada escenario, por lo que Excel permanece abierto después de algunas pruebas ... Además, no hay ningún registro para algunas pruebas fallidas. ¿Por qué? ¿Tiene alguna idea o sugerencia?Specflow [AfterScenario]

Aquí es mi método:

[AfterScenario]   
     public void AfterScenario() 
     { 
      if (TestContext.CurrentContext.Result.State != TestState.Success) ErrorLog(); 
      excelDriver.Stop(); 
     } 
+0

Amando el derribo condicional. Usé esto para dejar mi webbrowser de selenio abierto para fallas de prueba de unidad. – AndyM

Respuesta

20

que estaba jugando con el BeforeScenario y AfterScenario cosas yo solo hoy por primera vez.

Etiqueté mi escenario con @sometag y luego con el atributo en mi método AfterScenario() usé la misma etiqueta (sin la '@' o en el signo) como argumento, p.

archivo Característica:

@sometag 
Feature: Some feature or other 
Here is my feature description 
... 
Scenario: Some scenario 
... 

Eventos archivo:

[AfterScenario("sometag")] 
public void AfterScenario() 
{ 
    // stuff... 
} 

No sé si el etiquetado de cosas por el estilo es la clave. Tal vez sin etiquetas el AfterScenario() siempre se activaría, no lo intenté.

La otra cosa que puede intentar es unir VS al proceso nunit-agent.exe, establecer un punto de interrupción dentro de su método AfterScenario() y ver cuándo se golpea.

+0

No coloco ninguna etiqueta porque necesito que se dispare después de cada situación ... – Vajda

+1

Agh, qué error tan estúpido. Primero estaba haciendo el método errorLog que crea un archivo llamado por la prueba actual, y había algunos caracteres inválidos para el nombre del archivo y estaba lanzando una excepción porque eso. Como esto es anterior a excelDriver.Stop() esto nunca se ejecutó ... – Vajda

2

Etiquetar cosas así es clave si no desea que el afterScenario() se ejecute para eaach y todos los escenarios, pero si desea que se ejecute después de todos los escenarios, entonces no hay necesidad de etiquetar.

Cuestiones relacionadas