La façon dont JUnit compose du code réutilisable (au lieu d'en hériter), ce sont les règles.
Voir https://github.com/junit-team/junit/wiki/Rules
Voici un exemple stupide, mais vous comprendrez ce que je veux dire.
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
}
}
};
}
}
Vous pouvez ensuite utiliser votre règle de test comme suit :
import org.junit.Rule;
public class MyTest {
@Rule
public MyTestRule myRule = new MyTestRule();
}
BEFORE_CODE et AFTER_CODE seront alors exécutés autour de chacune de vos méthodes de test.
Si vous devez exécuter votre code une seule fois par classe, utilisez votre TestRule en tant que @ClassRule :
import org.junit.ClassRule;
public class MyTest {
@ClassRule
public static MyTestRule myRule = new MyTestRule();
}
Ahora, BEFORE_CODE
y AFTER_CODE
sera exécutée autour de chacune de vos classes de test.
@Règle n'est pas statique, @ClassRule est.
Une @ClassRule peut également être déclarée dans une Suite.
Notez que vous pouvez déclarer plusieurs règles dans une seule classe de test, c'est ainsi que vous composez les cycles de vie des tests aux niveaux des suites de tests, des classes de tests et des méthodes de tests.
Une règle est un objet que vous instanciez dans vos classes de test (statiquement ou non). Vous pouvez ajouter des paramètres de construction si nécessaire.
HTH