Как написать assertTimeoutPreemptively (JUnit 5) в JUnit 4? - PullRequest
0 голосов
/ 09 октября 2019

До сих пор я работал над JUnit 5, и теперь мне нужно работать на старой системе с JUnit 4, и я не могу обновить JUnit 5 там. У меня есть тест в JUnit 5, который я должен написать в JUnit 4, но я не уверен, как он будет работать или как писать? Ниже приведена версия теста JUnit 5.

@AfterEach
void afterEach() throws Exception {
    // Bleed off any events that were generated...
    assertTimeoutPreemptively(ofMillis(MESSAGE_CLEARING_TIMEOUT_MS), () -> {
        boolean tryAgain = true;
        while (tryAgain) {
            try {
                final IMessageFacade message = messageConsumer.receiveMessage(MESSAGE_TIMEOUT_MS);
                message.acknowledge();
            } catch (MessagingException e) {
                tryAgain = false;
            }
        }
    });
    broker.stop();
}

В тесте я использую assertTimeoutPreemptively() и не уверен, как преобразовать его в JUnit 4. Я попытался установить тайм-аут, который является глобальным тайм-аутом в JUnit 4, но это не сработало,Любое руководство по написанию выше @AfterEach условия с JUnit 4?

1 Ответ

0 голосов
/ 18 октября 2019

Разве утверждения не должны выполняться только один раз? Найти утверждения в тестовом демонтаже несколько удивительно. Постарайтесь сделать свои утверждения частью ваших тестов.

В JUnit 5 это выглядит следующим образом:

import static java.util.concurrent.TimeUnit.MILLISECONDS;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;

public class TimeoutJUnit5Test {

    @Test @Timeout(value = 10, unit = MILLISECONDS)
    void junitFiveTimeout() {
        // ...
    }
}

, а в JUnit 4:

import org.junit.Test;

public class TimeoutJUnit4Test {

    @Test(timeout = 10)
    public void junitFourTimeout() {
        // ...
    }
}

Что мешает вамиспользуя обе версии JUnit? (pom.xml):

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>

Последний вариант - просто скопировать / адаптировать поведение из нового JUnit 5 assertTimeoutPreemptively () для вашего собственного проекта.

...