En nuestro proyecto tengo varias pruebas de JUnit que, por ejemplo, toman cada archivo de un directorio y ejecutan una prueba en él. Si implemento un testEveryFileInDirectory
método en el, TestCase
esto aparece como solo una prueba que puede fallar o tener éxito. Pero estoy interesado en los resultados de cada archivo individual. ¿Cómo puedo escribir un TestCase
/ TestSuite
tal que cada archivo aparezca como una prueba separada, por ejemplo, en el TestRunner gráfico de Eclipse? (Codificar un método de prueba explícito para cada archivo no es una opción).
Compare también la pregunta ParameterizedTest con un nombre en Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Hans-Peter Störr
fuente
fuente
Respuestas:
Eche un vistazo a las pruebas parametrizadas en JUnit 4.
De hecho, hice esto hace unos días. Trataré de explicar ...
Primero construya su clase de prueba normalmente, ya que solo estaba probando con un archivo de entrada. Decora tu clase con:
Cree un constructor que tome la entrada que cambiará en cada llamada de prueba (en este caso, puede ser el archivo en sí)
Luego, cree un método estático que devolverá una serie
Collection
de matrices. Cada matriz de la colección contendrá los argumentos de entrada para el constructor de su clase, por ejemplo, el archivo. Decora este método con:Aquí hay una clase de muestra.
También mira este ejemplo
fuente
JUnit 3
JUnit 4
fuente
Pruebas parametrizadas Junit 5
Las pruebas parametrizadas de JUnit 5 respaldan esto al permitir el uso de un método como fuente de datos :
Pruebas dinámicas JUnit 5
JUnit 5 también apoya esto a través de la noción de a
DynamicTest
, que se generará en a@TestFactory
, mediante el método estáticodynamicTest
.Las pruebas ejecutadas en su IDE (IntelliJ aquí) se mostrarán así:
fuente
Debería ser posible en JUnit 3 heredando
TestSuite
y anulando eltests()
método para listar los archivos y para cada retorno una instancia de una subclase deTestCase
que toma el nombre del archivo como parámetro del constructor y tiene un método de prueba que prueba el archivo dado en el constructor.En JUnit 4 podría ser incluso más fácil.
fuente
Podría considerar usar la biblioteca JUnitParams , por lo que tendría algunas opciones más (más limpias):
Puede ver más ejemplos de uso aquí .
Además de JUnitParams, por qué escribir pruebas parametrizadas con él es más fácil y legible :
fuente
Si TestNG es una opción, puede usar Parámetros con DataProviders .
La prueba de cada archivo individual tendrá su resultado mostrado en el informe basado en texto o en la interfaz de usuario del complemento TestNG de Eclipse. El número total de pruebas ejecutadas contará cada uno de sus archivos individualmente.
Este comportamiento difiere de las teorías JUnit , en las que todos los resultados se agrupan bajo una entrada de "teoría" y solo cuentan como 1 prueba. Si desea informes de resultados separados en JUnit, puede probar Pruebas parametrizadas .
Prueba y entradas
Salida de ejemplo
fuente
Tuve un problema similar y terminé escribiendo un corredor JUnit 4 simple que permite a med generar pruebas dinámicamente.
https://github.com/kimble/junit-test-factory
fuente