Junit4 - очистка по таймауту - PullRequest
       21

Junit4 - очистка по таймауту

6 голосов
/ 24 февраля 2011

Когда я запускаю тест с аннотацией @Test (timeout = 3000) и время ожидания истекает, он немедленно убивает тест и не вызывает мой метод tearDown с аннотацией @After.

Каков будет способ очистки в таком сценарии?

РЕДАКТИРОВАТЬ: Мой тест вызывает конечные точки ресурса, используя jax-rs по проводу, и время ожидания теста в серединезапрос http.Это тот случай, когда я уверен, что @After не вызывается

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Строго говоря, тест не убивает, он проваливается.Что, очевидно, означает, что метод, помеченный @After, будет работать.

Приведенный ниже код работает для меня как чудо.

@Test(timeout=1)
public void testTimeout() {
    try {
        Thread.sleep(10);
    } catch (InterruptedException ex) {}
}

@After
public void after() {
    System.out.println("@After is invoked, indeed.");
}

Вывод:

Testsuite: javaapplication1.MainTest
After is invoked, indeed.
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec
1 голос
/ 09 июня 2011
@Rule  
public Timeout to = new Timeout(300000);

Это работает с JUnit 4.7.

1 голос
/ 24 февраля 2011

У меня тоже были проблемы с атрибутом timeout. Может быть, это поможет вам найти четыре проблемы ...

В моем случае путаница была вызвана тем, что тестовый код метода, помеченного @Test (timeout = ...), запускается в отдельном потоке. Поэтому некоторые вещи ThreadLocal, к которым я обращался во время теста, не удалось очистить методом @After.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...