testing - oculta - el lado oscuro de las vacunas
afirmar vs. verificar en Selenio (4)
Los controles que realiza el selenio generalmente vienen en dos formas: assertFoo y verifyFoo. Entiendo que assertFoo falla todo el caso de prueba, mientras que verifyFoo solo toma nota de la falla de ese control y permite que el caso de prueba continúe.
Entonces, con verifyFoo puedo obtener resultados de prueba para múltiples condiciones, incluso si una de ellas falla. Por otro lado, un chequeo fallido para mí es suficiente para saber, que mis ediciones rompieron el código y tengo que corregirlas de todos modos.
Entonces mi pregunta es:
¿En qué situaciones concretas prefieres una de las dos formas de verificar el otro? ¿Cuáles son tus experiencias que motivan tu punto de vista?
Por lo general, debe ajustarse a una afirmación por caso de prueba, y en este caso la diferencia se reduce a cualquier código de extracción que deba ejecutarse. Pero de todos modos deberías poner esto en un método @After
.
He tenido bastantes problemas con los métodos verify verify*()
en SeleneseTestBase (por ejemplo, usan System.out.println()
, y com.thoughtworks.selenium.SeleneseTestBase.assertEquals(Object, Object)
simplemente no hace qué esperas) así que he dejado de usarlos.
Utilizaría un assert()
como punto de entrada (una "puerta de enlace") en la prueba. Solo si la afirmación es aprobada, se ejecutarán las verify()
. Por ejemplo, si estoy verificando el contenido de una ventana resultante de una serie de acciones, assert()
la presencia de la ventana y luego verify()
el contenido.
Un ejemplo que uso a menudo - verificando las estimaciones en una jqgrid: assert()
la presencia de la grilla y verify()
las estimaciones.
Si está ejecutando pruebas de Selenium en un sistema de producción y desea asegurarse de que está conectado como usuario de prueba, por ejemplo, en lugar de su cuenta personal, es una buena idea primero afirmar que el usuario correcto está conectado antes de activar cualquier acciones que tendrían efectos involuntarios, si se usan por accidente.
Me he encontrado con algunos problemas que fueron superados mediante el uso
assert*()
en lugar de
verify*()
Por ejemplo, en las validaciones de formulario si desea verificar el elemento del formulario, el uso de
verifyTrue(...);
pasará la prueba incluso si la cadena no está presente en el formulario.
Si reemplaza assert con verify, entonces funciona como se esperaba.
Recomiendo ir con el uso de assert * ().