- Tengo 2 reglas "nivel de clase":
MyRule1
yMyRule2
MyRule2
depende deMyRule1
MyRule1
"antes" método por lo tanto, se debe ejecutar antes de que elMyRule2
método de "antes".
En JUnit 4, se puede implementar de esta manera, a través de la RuleChain :
static MyRule1 myRule1 = new MyRule1();
static MyRule2 myRule2 = new MyRule2(myRule1);
@Rule
TestRule ruleChain = RuleChain.outerRule(myRule1)
.around(myRule2);
En JUnit 5, tengo que poner en práctica esta manera:
static MyRule1 myRule1 = new MyRule1();
@RegisterExtension
static MyRule2 myRule2 = new MyRule2(myRule1);
con MyRule2
:
class MyRule2 implements BeforeAllCallback {
private final MyRule1 myRule1;
public MyRule2(MyRule1 myRule1) {
this.myRule1 = myRule1;
}
@Override
public void beforeAll(ExtensionContext extensionContext) {
this.myRule1.beforeAll();
X x = this.myRule1.getX();
// do Rule 2 stuff with x
}
}
Es el equivalente de la aplicación JUnit 4 cuando se trata del resultado.
Pero tengo que llamar explícitamente y de forma manual la beforeAll()
devolución de llamada de MyRule1
en MyRule2
.
Me gustaría que MyRule2
no sería responsable de MyRule1
la ejecución.
Fui a través de la documentación de la extensión del modelo de JUnit 5 , pero no encontró nada en extensiones que dependen de otras extensiones.
Para las extensiones registradas a través de @RegisterExtension
, en la actualidad (a partir de JUnit Jupiter 5.3.1) sin soporte incorporado análoga a JUnit 4 de RuleChain
.
Sin embargo, este problema se vincula a una solución personalizada y también propone soporte para @Order
controlar el orden en el que se ejecutan las extensiones.