A veces en JUnit podemos crear clases que permiten testear comportamientos que están relacionados entre sí. Por seguir con las analogías de las calculadoras, una de las más populares en el mundo de los tutoriales de testing, tal vez hayamos dividido el código de los tests de una calculadora en clases, que incluso puede que estén parametrizadas: TestCalculadoraAdd, TestCalculadoraSub, TestCalculadoraDiv, TestCalculadoraMul…
Si creamos una suite, podemos señalizarle a JUnit que estos tests están relacionados entre sí. Se trata de algo parecido a una carpeta de tests. Pedirle a JUnit que testee una de estas suites provocará que se ejecuten de forma recursiva todos los tests que hayan sido enlazados como que forman parte de nuestra suite.
Crear una suite de JUnit 4 es simple. Todo lo que tenemos que hacer es crear una clase de test y utilizar la anotación @RunWith:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
public class CalculadoraTestSuite {
}
La anotación RunWith es una anotación especial que sirve para indicar que queremos utilizar una clase runner especial para lanzar el test. Los runners son las clases expertas que se ocupan de llamar a cada uno de los métodos de un test de JUnit, por lo que si cambiamos el runner, seguramente alteremos la forma en la que JUnit ejecuta nuestro test case. En este caso, Suite es un tipo de runner que se ocupa de las colecciones de test.
A continuación, usaremos la anotación @Suite.SuiteClasses (o simplemente @SuiteClasses si importamos org.junit.runners.Suite.SuiteClasses) para especificar cuáles son los tests que queremos que conformen nuestra suite. A esta anotación le pasamos como parámetro un array con las clases, usando el accesor estático .class que tienen todas las clases para poder obtener una referencia a su Class correspondiente:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
CalculadoraAddTest.class,
CalculadoraSubTest.class,
CalculadoraMulTest.class,
CalculadoraDivTest.class
})
public class CalculadoraTestSuite {
}
Eso sería todo. Sí, en serio. No necesitas poner código dentro de la clase CalculadoraTestSuite porque lo único que importa es la anotación, que sirve para que el runner de JUnit recursivamente invoque en su lugar los tests que haya dentro de la anotación SuiteClasses. Por lo general, cuando se use esta anotación, las clases de test que conforman la suite se correrán en el orden que se haya especificado dentro del array que se le pasa como parámetro a esa anotación.