2011-02-28 18 views
14

Actualmente, estoy escribiendo la automatización de pruebas utilizando Java y rc selenio.Ignorar error de aserción en un caso de prueba (JUnit)

me gustaría verificar todos los contenidos presentes en la interfaz de usuario, la función es decir, por debajo:

public String UITest() throws IOException { 

    String result="Test Start<br />"; 

    try { 
     openfile(1); 
     for (String url : uiMaps.keySet()) { 
      selenium.open(url); 
      for (String item : uiMaps.get(url)) {     
       assertEquals(url+" check: " + item, true,selenium.isTextPresent(item)); 
       result+=url+" check: " + item+" : OK<br />"; 
      } 
     } 
    } catch (AssertionError e) { 
     result+=e.getMessage(); 
    } 
    result+="Test finished<br />"; 
    return result; 
} 

la función supongamos devolver una cadena contiene información acerca de la prueba. Sin embargo, la función se detuvo una vez que se produjo un error de aserción.

lo tanto, quiero saber si hay una manera de ignorar el fallo y mantener la ejecución de todas las verificaciones afirmación.

Gracias por cualquier ayuda

Respuesta

18

se puede usar un JUnit 4 error collector rule:

la regla ErrorCollector permite ejecución de una prueba para continuar después de se encuentra el primer problema (para ejemplo, para recoger todas las los filas incorrectas en una tabla, e informar todos a la vez)

Por ejemplo, usted puede escribir una prueba como esta.

public static class UsesErrorCollectorTwice { 
    @Rule 
    public ErrorCollector collector= new ErrorCollector(); 

    @Test 
    public void example() { 
    String x = [..] 
    collector.checkThat(x, not(containsString("a"))); 
    collector.checkThat(y, containsString("b"));    
    } 
} 

El colector de errores utiliza Hamcrest Matchers. Dependiendo de tus preferencias, esto es positivo o no.

+0

Parece que ejecutará todas las pruebas incluso si hay una falla. Pero tengo otra pregunta. Compruebo la API y dice que todas las filas son incorrectas en una tabla, y las informo todas a la vez. Mi pregunta es si puedo tomar la información de la mesa de alguna manera. Gracias. – user638297

+0

Debido a la accesibilidad de la lista de errores del errorcollector original, implementé mi propio errorcollector heredando el junit. Ahora funciona. Muchas gracias por la ayuda. – user638297

+0

@ user638297 Sí, no es difícil implementar una MethodRule que hace exactamente lo que desea. ¿Podría reunir toda la información que estaba buscando? –

0

no afirman nada en la función. Volver decir nulo en lugar, y tienen todo el que está llamando a seguir adelante, pero luego fallar si la función devuelve nulo

2

De Selenio documentation:

Todo Selenio Las afirmaciones se puede utilizar en 3 modos: "valer", " verificar "y" esperar ". Por ejemplo, puede "assertText", "verifyText" y "waitForText". Cuando falla un "assert", la prueba se cancela. Cuando falla una "verificación", la prueba continuará ejecutándose, registrando la falla. Esto permite que un solo "afirman" para asegurar que la aplicación se encuentra en la página correcta, seguido por un grupo de "verificar" afirmaciones para poner a prueba los valores de campo de formulario, etiquetas, etc.

+0

pensé que el problema es la función assertEquals de JUnit en lugar de selenio ya que la función fo selenio que utiliza es "isTextPresent" y sólo es responsable de devolver un valor booleano. Corrígeme si estoy equivocado. Gracias. – user638297

+1

Según la documentación, que siempre tienen posibilidad de elegir entre: * * TextPresent afirman, verificar * * * TextPresent y es * TextPresent. Cada versión tiene un comportamiento diferente. –

1

estoy seguro de que haya descubierto a sí mismo a estas alturas: el try-catch debe estar dentro del bucle, no fuera de él;)

Cuestiones relacionadas