TestExecutionListener не слушает вообще - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть пользовательский TestExecutionListener:

public class CustomExecutionListener extends AbstractTestExecutionListener {
    @Override
    public void beforeTestMethod(TestContext testContext) throws Exception { 
        // some code ...
    }

    @Override
    public void afterTestMethod(TestContext testContext) throws Exception {
        // some code ...
    }
}

В моем тестовом классе я настраиваю его следующим образом:

@TestExecutionListeners({
    DirtiesContextTestExecutionListener.class,
    DependencyInjectionTestExecutionListener.class,
    CustomExecutionListener.class
})
class MyTestClass {

    private static ApplicationContext appContext;

    @BeforeAll
    static void init() {
        appContext = new AnnotationConfigWebApplicationContext();
        // register some configs for context here
    }

    @Test
    void test() {
    }
}

И CustomExecutionListener не работает - в отладчике я даже не хожу туда. Я полагаю, это может быть проблемой в том, как я создаю ApplicationContext: может быть TestContext инкапсулирует не мое appContext? (Я не совсем понимаю, как создается TestContext. Может быть, кто-то может объяснить?) Но даже тогда он должен хотя бы перейти на beforeTestMethod в меньшем? Или нет?

И второй вопрос: если это действительно не мой appContext, как я могу это исправить? И. е. установить мой appContext на testContext.getApplicationContext()? Я должен быть в состоянии извлечь бобы из моего appContext как testContext.getApplicationContext().getBean(...).

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Для начала TestExecutionListener поддерживается только при использовании Spring TestContext Framework (TCF).

Поскольку вы используете JUnit Jupiter (a.k.a., JUnit 5), вам необходимо аннотировать свой тестовый класс с помощью @ExtendWith(SpringExtension.class) или, альтернативно, @SpringJUnitConfig или @SpringJUnitWebConfig.

Кроме того, вам не следует создавать ApplicationContext программно. Скорее, вы позволите TCF сделать это за вас - например, декларативно указав, какие классы конфигурации использовать через @ContextConfiguration, @SpringJUnitConfig или @SpringJUnitWebConfig.

В общем, я рекомендую вам прочитать главу Тестирование Справочного руководства Spring, и, если это не поможет, вы, безусловно, сможете найти учебники по "тестированию интеграции со Spring" онлайн.

С уважением,

Сэм ( автор Spring TestContext Framework )

0 голосов
/ 10 сентября 2018

Вы пробовали @Before, который не требует статических методов ??

private static ApplicationContext appContext;

@Before
public void init() {
    if(appContext == null) {
        appContext = new AnnotationConfigWebApplicationContext();
        // register some configs for context here
     }
}
...