¿Cuál es el equivalente de @RuleChain en JUnit 5?

Baptiste Le Bail
  • Tengo 2 reglas "nivel de clase": MyRule1yMyRule2
  • MyRule2 depende de MyRule1
  • MyRule1"antes" método por lo tanto, se debe ejecutar antes de que el MyRule2mé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 MyRule1en MyRule2.

Me gustaría que MyRule2no sería responsable de MyRule1la 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.

Sam Brannen:

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 @Ordercontrolar el orden en el que se ejecutan las extensiones.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=171467&siteId=1
Recomendado
Clasificación