La forma JUnit para componer código reutilizable (en lugar de heredar de él) son Reglas.
Ver https://github.com/junit-team/junit/wiki/Rules
Este es un ejemplo tonto, pero obtendrá el punto.
import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;
import org.junit.runner.Description;
public class MyTestRule implements TestRule {
@Override
public Statement apply(final Statement statement, Description description) {
return new Statement() {
public void evaluate() throws Throwable {
// Here is BEFORE_CODE
try {
statement.evaluate();
} finally {
// Here is AFTER_CODE
}
}
};
}
}
entonces usted puede utilizar su TestRule así:
import org.junit.Rule;
public class MyTest {
@Rule
public MyTestRule myRule = new MyTestRule();
}
BEFORE_CODE y AFTER_CODE A continuación, se ejecuta alrededor de cada uno de sus métodos de prueba.
Si usted necesita para ejecutar su código sólo una vez por cada clase, utilice su TestRule como @ClassRule:
import org.junit.ClassRule;
public class MyTest {
@ClassRule
public static MyTestRule myRule = new MyTestRule();
}
Ahora, BEFORE_CODE
y AFTER_CODE
se ejecutará alrededor de cada uno de su clase de prueba.
@Rule campo no es estático, @ClassRule campo es.
Una @ClassRule también se puede declarar en una suite.
Tenga en cuenta que puede declarar varias reglas en una única clase de prueba, así es como se componen los ciclos de vida de prueba en niveles de prueba-suites, clases de prueba y métodos de prueba.
Una regla es un objeto que usted instancia en sus clases de prueba (estáticamente o no). Puede agregar parámetros contructor si es necesario.
HTH
¿Son todas las '@ BeforeClasses' exactamente iguales o simplemente comparten algún código? –
¿Por qué la herencia es una manera sucia? –
@lu, el método es estático y la herencia no sería lo mejor. –