Crear JUnit Conjunto de pruebas con ejemplo: @RunWith @SuiteClasses
⚡ Resumen inteligente
JUnit Los conjuntos de pruebas agregan casos de prueba de varias clases para que se ejecuten juntos en una sola pasada, impulsados por las anotaciones @RunWith(Suite.class) y @SuiteClasses y lanzados a través de una clase de ejecutor de pruebas ordinaria.

In JUnit, un conjunto de pruebas nos permite agregar todos Casos de prueba de varias clases en un solo lugar y ejecutarlas juntas.
Para ejecutar la prueba de conjunto, debe anotar una clase utilizando las anotaciones que se mencionan a continuación:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) o @Suite.SuiteClasses({test1.class, test2.class…})
Con las anotaciones anteriores, todas las clases de prueba del conjunto se ejecutarán una por una. La clase del conjunto permanece vacía: solo almacena las anotaciones, y el ejecutor las lee para decidir qué ejecutar.
Pasos para crear un conjunto de pruebas y un ejecutor de pruebas
Los cuatro pasos que se describen a continuación permiten crear el conjunto de pruebas más pequeño que realmente se ejecuta: dos clases de prueba ordinarias, una clase de conjunto que les da nombre y un ejecutor que inicia el conjunto desde un método principal.
Paso 1) Crea una clase de prueba simple (por ejemplo, MyFirstClassTest) y agrega un método anotado con @Prueba.
La primera clase contiene un único método de prueba vacío, lo cual es suficiente para demostrar que el conjunto de pruebas lo detecta:
Paso 2) Crea otra clase de prueba para agregar (por ejemplo, MySecondClassTest) y crea un método anotado con @Test.
La segunda clase sigue exactamente la misma estructura, por lo que el conjunto tiene dos clases separadas para agregar:
Paso 3) Para crear un conjunto de pruebas, primero debe anotar la clase con @RunWith(Suite.class) y @SuiteClasses(class1.class, class2.class…).
Observe que la clase de suite TestSuiteExample no declara ningún método de prueba propio; las dos anotaciones contienen toda la información:
Paso 4) Cree una clase Test Runner para ejecutar nuestro conjunto de pruebas como se indica a continuación:
El corredor es un simple Java clase con un método principal que pasa la clase de suite a JUnitNúcleo:
Code Explicación:
- Code Línea 8: Declarando el método principal de la clase Test que ejecutará nuestro JUnit prueba.
- Code Línea 9: Ejecutar casos de prueba usando JUnitCore.runClasses que toma el nombre de la clase de prueba como parámetro (en el ejemplo anterior, está utilizando TestSuiteExample.class que se muestra en el paso 3).
- Code Línea 11: Procesar el resultado usando un bucle for e imprimir el resultado fallido.
- Code Línea 13: Imprimiendo el resultado exitoso.
Salida: Aquí está el resultado que muestra una prueba exitosa sin fallos. trace como se indica a continuación:
La barra verde confirma para qué sirve una suite: un lanzamiento, una vista de resultados y ambas clases se informan debajo del nodo de la suite en lugar de en dos ejecuciones separadas.
JUnit Ejemplo de conjunto de pruebas
Consideremos un ejemplo más complejo, en el que las clases dentro del conjunto realmente... afirmar algo en lugar de contener un método vacío.
Prueba Junit.java
JunitTest.java es una clase simple anotada con el @Corre con y @Suite anotaciones. Puede enumerar cualquier número de clases del conjunto como parámetros, como se muestra a continuación:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java es una clase de prueba que tiene métodos de prueba que imprimen un mensaje, como se muestra a continuación. Utilizará esta clase como miembro de la suite en la clase mencionada anteriormente. Depende de una clase auxiliar llamada JUnitMensaje, que se define en otra parte del mismo paquete y no se reproduce aquí.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java es otra clase de prueba, similar a SuiteTest1.java, teniendo un método de prueba para imprimir un mensaje como se indica a continuación. Utilizará esta clase como miembro de la suite en Prueba Junit.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Resultado
Después de ejecutar Prueba Junit.java, que contiene un conjunto de herramientas SuiteTest1.java y SuiteTest2.javaObtendrás el siguiente resultado. La consola imprime los mensajes producidos por ambas clases:
El JUnit La vista registra la misma ejecución que tres métodos de prueba que pasan, agrupados bajo la clase suite:
Nota: Las etiquetas de la consola en este ejemplo están cruzadas: la cadena impresa por SuiteTest1 dice "Suite Test 2" y la impresa por SuiteTest2 dice "Suite Test 1". Los listados originales se reproducen sin cambios, por lo que las etiquetas permanecen como las escribió el autor; lea el nombre de la clase en la JUnit Se utiliza la vista previa en lugar de la etiqueta impresa al hacer coincidir la salida con la fuente.
Cómo crear un conjunto de pruebas en JUnit 5
JUnit 5 elimina los ejecutores por completo, por lo que @RunWith(Suite.class) no existe en los paquetes org.junit.jupiter. Las suites se movieron al JUnit Plataforma, que los envía en un artefacto separado llamado motor de suite de plataforma JUnit. Agrega esa dependencia, luego anota una clase con @Suite y una de las anotaciones de selector.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Las anotaciones de selector reemplazan la lista única @SuiteClasses con una pequeña familia de opciones:
| Anotación | Lo que selecciona |
| @SelectClasses | Clases de prueba individuales nombradas una por una, el reemplazo directo de @SuiteClasses. |
| @SelectPackages | Todas las clases de prueba del paquete mencionado y de todos sus subpaquetes. |
| @IncluirPatronesDeNombreDeClase | Un filtro de expresión regular aplicado sobre la selección. |
| @SuiteDisplayName | En el informe se muestra un nombre legible en lugar del nombre de la clase. |
En la práctica, importan dos diferencias más. A JUnit La clase de suite 5 puede declarar los métodos @BeforeSuite y @AfterSuite, que se ejecutan una vez alrededor de toda la suite, y el JUnit 4 ejemplos anteriores todavía se ejecutan en el JUnit La plataforma funciona mediante el motor clásico, por lo que no es necesario reescribir el código original de esta página para que siga funcionando.
Ventajas y limitaciones de JUnit Suites de prueba
Una suite es un grupoping mecanismo, no un marco de prueba Tiene su propia naturaleza, y eso determina tanto lo que hace bien como dónde deja de ser útil.
Ventajas
- Un lanzamiento ejecuta clases relacionadas juntas, por lo que un conjunto de humo o un regresión El proceso se inicia con un solo comando.
- La vista de resultados agrupa todas las clases bajo un mismo nodo de suite, lo que facilita la detección de un fallo compartido.
- La lista de miembros reside en el código, por lo que se revisa y se versiona como cualquier otro archivo fuente.
- La misma clase de suite se puede iniciar desde un IDE, desde un ejecutor como JUnitNúcleo o desde una herramienta de compilación.
Limitaciones
- @SuiteClasses es una lista codificada de forma fija, por lo que una nueva clase de prueba se omite silenciosamente hasta que alguien edita el conjunto de pruebas.
- El paquete de clases no ofrece ninguna garantía de ordenación más allá del orden en que aparecen listadas.
- No hay nada compartido entre las clases miembro, por lo que una suite no sustituye a un fixture ni a una clase base.
- Las herramientas de compilación ya detectan las clases de prueba mediante convenciones de nomenclatura, lo que hace que un conjunto de pruebas sea redundante en muchos proyectos.
Errores comunes al crear un JUnit Banco de pruebas
La mayoría de los problemas con la suite generan un mensaje breve y poco útil. La tabla relaciona los mensajes que probablemente encontrará con su causa y solución.
| Mensaje o síntoma | Causa | Solución |
| initializationError: No hay métodos ejecutables | La clase se ejecuta como una clase de prueba ordinaria, pero solo contiene anotaciones. | Agregue @RunWith(Suite.class) para que el ejecutor de suite tome el control en lugar del ejecutor predeterminado. |
| No se puede encontrar el símbolo: clase Suite | Falta la importación de Suite. | Importa org.junit.runners.Suite junto con org.junit.runner.RunWith. |
| La suite se ejecuta, pero se omite una clase. | La clase nunca se agregó a la lista @SuiteClasses. | Agregue la clase explícitamente o muévala a @SelectPackages en JUnit 5. |
| El compilador no acepta el nombre de la clase. | @Runwith o @suiteClasses se escribieron con mayúsculas y minúsculas incorrectas. | Java Las anotaciones distinguen entre mayúsculas y minúsculas: escriba @RunWith y @SuiteClasses exactamente como se indican. |
| Las pruebas en la propia clase de la suite nunca se ejecutan. | Se agregó un método @Test al contenedor de la suite. | Mantén el contenedor vacío y mueve el método de prueba a una clase miembro. |
Escribir la suite una vez y mantenerping Es preciso el trabajo real. Si la lista se desvía de las clases en el disco, el conjunto informa en verde mientras que parte de la prueba de unidad El conjunto nunca se ejecuta en absoluto, uno de los modos de fallo más silenciosos en pruebas de software.







