В JUnit 4.11 -> 4.12 введена ошибка @Rule, тесты не выполняются - PullRequest
0 голосов
/ 08 января 2019

Я перешел с JUnit 4.11 на 4.12. Теперь у меня есть ошибка в выполнении аннотированного метода @Rule. Мой метод правил выглядит так:

@Rule
public WireMockRule testServer() {
    // ... other stuff gets created ...
    return new WireMockRule(
            wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
}

Теперь, после запуска, метод правила выполняется (отлично), тест не запускается (не отлично) , но сразу же testServer() метод выполняется снова , без заканчивая первым. Таким образом, тест не пройден, поскольку порт уже привязан и все еще связан.

Нет проблем в 4.11 с этим. Нет конфигурации для параллельного запуска моих тестов. Я должен упомянуть, что мой Test-Class параметризован с @RunWith(Parameterized.class), но выполнялся по порядку в 4.11.

1 Ответ

0 голосов
/ 08 января 2019

Я нашел причину ошибки и простое исправление. Только что увидел, скачав исходный код WireMockRule и отладив его. Оказывается, в JUnit 4.11 метод testServer() вызывается один раз на параметр, прежде чем правило получает вызов apply(...) для запуска тестов, в 4.12 он вызывается всегда дважды до того, как правило получит вызов apply(...) для запуска тестов. Так что решение было простым:

private WireMockRule testServer;

@Rule
public WireMockRule testServer() {
    if (testServer != null) {
        return testServer;
    }
    // ... other stuff gets created ...
    testServer = new WireMockRule(
        wireMockConfig().extensions(...parameterized-extensions...).port(PORT), true);
    return testServer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...