Я хочу инициализировать состояние перед каждым тестовым случаем Spring Boot JUnit с TestExecutionListener
. Эта инициализация должна запускаться до соответствующего обратного вызова JUnit @Rule
s.
Я бы ожидал, что beforeTestMethod
будет правильным для этого, потому что его комментарий JavaDoc говорит
Предварительно обрабатывает тест перед выполнением до обратных вызовов жизненного цикла базовой тестовой платформы
Правила вносят обратные вызовы "до" в тест, поэтому я ожидал, что beforeTestMethod
будет выполнен перед правилом. Однако, отладчик показывает, что это не так!
Это структура моего кода:
@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners(listeners = MyTestExecutionListener.class, mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class MyTest {
@Autowired
@Rule
public MyRule rule;
@Test
public void test1() {
// ...
}
// ... more tests
}
public class MyTestExecutionListener implements TestExecutionListener {
@Override
public void beforeTestMethod(TestContext testContext) {
// ...
}
}
@Component
public class AutoLogin extends ExternalResource {
@Override
protected void before() {
// ...
}
}
Я хочу, чтобы методы выполнялись в порядке
beforeTestMethod()
rule.before()
test1()
но фактический заказ
rule.before()
beforeTestMethod()
test1()
Есть идеи, что я делаю неправильно, или какой другой метод TestExecutionListener
я должен использовать вместо этого?