2010-05-24 10 views
12

Me gustaría saber si está "bien" para escribir una prueba sin ningún "afirmar" en ella. Entonces, la prueba fallará solo cuando ocurra una excepción/error.¿Puedo escribir una prueba sin ninguna afirmación en ella?

Por ejemplo: como una prueba que tiene una consulta de selección simple, para garantizar que la configuración de la base de datos es correcta. Entonces, cuando cambio alguna configuración de db, vuelvo a ejecutar esta prueba y verifico si la configuración es correcta. ?

Gracias!

+0

@Kyle Rozendo: JUnit puede (y típicamente * es *) usarse para más de una prueba de unidad. Agregaste una etiqueta de "prueba de unidad" a esta pregunta, pero realmente no estoy seguro de que una prueba verifique alguna "configuración db" (el OP escribió * así que cuando cambio alguna configuración db, vuelvo a ejecutar esta prueba y verificar si la configuración es correcta *) es realmente una prueba unitaria. En ninguna parte el OP mencionó pruebas unitarias y no llamaría a esa prueba una "prueba de unidad". – SyntaxT3rr0r

+0

@Web - "La prueba unitaria es un método de verificación y validación de software en el que un programador prueba si las unidades individuales de código fuente son aptas para su uso."No estoy de acuerdo :) –

+2

Este tipo de examen a veces se denomina" prueba de humo ".Si sale humo, ha fallado la prueba. –

Respuesta

15

Es perfectamente válido para asegurarse de que se ejecuta una prueba de unidad sin encontrar una excepción.

Según la sugerencia de Matt B, asegúrese de documentar lo que la prueba está probando para ser clara y precisa.

+4

solo asegúrese de documentar lo que la prueba realmente está probando como clara –

+0

¡gracias! @matt ¡Sí, lo haría! :) (El ejemplo que di sin duda requiere que) – stratwine

+0

Para "estar seguro" debe afirmar que "x" tiene "for-sure -> this-value-or-state-or- lo que sea ", prueba sin afirmación tiene sentido: de 0 a ninguno –

2

Las pruebas son una discusión realmente subjetiva. Algunas personas dirán que no, siempre debes tener la sintaxis AAA. Personalmente, he escrito pruebas que hacen cosas muy similares a lo que estás hablando, así que diría, seguro que seguir adelante; si te ayuda a construir una aplicación más estable, ¿por qué no?

Por ejemplo, en NUnit considero que [ExpectedException typeof (XXXX)] es lógicamente equivalente a un Assert.

También en algunas pruebas es posible que no afirme nada más que esperar un orden particular de ejecución a través de Mock and Expects.

+0

gracias! Sí. Me recuerda haber visto un tutorial de JMock sin afirmaciones, sino Expectativas. ¡Lo exploraré! – stratwine

4

Como señaló @Kyle, su caso de prueba es válido. De hecho, lo opuesto también sería válido: cuando escribe un caso de prueba para confirmar que una determinada llamada con parámetros específicos da como resultado una excepción.

3

Seguro que puedes hacer eso. También está perfectamente bien escribir una prueba sin aserciones donde el resultado esperado es una excepción. Sé que testng te permitirá especificar una excepción que se debe lanzar y la prueba fallará si no se lanza la excepción esperada.

0

Es seguramente aceptable escribir una prueba unitaria que no tenga ninguna aserción. Puede hacer esto para:

  • Comprobación de un caso que finaliza sin excepción. En este caso, si puede, es bueno vestir la prueba con el tipo específico de la excepción, como en [ExpectedException (MyException)].

  • Hay una función de prueba. Incluso si no existe la posibilidad de que la prueba genere una excepción, es posible que desee hacer que esta prueba falle si alguien decide eliminar esa característica. Si la prueba utiliza un método y el método se elimina, la prueba simplemente no se construirá.

0

el propósito de la prueba es comprobar si "X" tiene un "algo esperado", con el fin de comprobar que "algo esperado" es correcto afirmar, o esperar a verificar. Esta es la razón por la que la mayoría de los frameworks implementa esos métodos de una u otra manera

Cuestiones relacionadas