Интеграционные тесты с kafkaembedded работают отлично по отдельности, но всегда дают сбой при запуске всего набора тестов (с использованием @Rule)) - PullRequest
0 голосов
/ 10 мая 2019

У меня есть Java-приложение, использующее dropqizard + maven, и я внедрил производителей и потребителей kafka, использующих библиотеки apache kafka.Сейчас я пишу интеграционные тесты для того же самого в Junit4, и для этого я наткнулся на эту библиотеку, чтобы протестировать Kafka с запущенным встроенным kafka - https://github.com/charithe/kafka-junit

Реализация проста, запускать встроенный kafka перед каждым тестовым примером,позвольте логике приложения отправлять сообщения на эту кафку, а затем пытаться использовать сообщения, используя утилиты, предоставленные в библиотеке.

import com.github.charithe.kafka.EphemeralKafkaBroker;
import com.github.charithe.kafka.KafkaJunitRule;
public Class MyTest {
    @Rule
    public KafkaJunitRule kafkaRule = new KafkaJunitRule(EphemeralKafkaBroker.create(kafkaBrokerPort));

    @Test
    public void checkIfMessageArrived() throws ExecutionException, InterruptedException, TimeoutException {
       // Let the app send messages to this embedded server

        List<String> result = kafkaRule.helper().consumeStrings(MY_TOPIC, 1).get(30, TimeUnit.SECONDS);
        String lastResponseBody = MyUtil.verifyResponse("expected", result.get(0)); //assertions are here
    }
}

Теперь эти тестовые случаи (есть несколько похожих, не зависящих от чего-либо еще вtest class) будет работать всегда, когда запускается индивидуально, но некоторые из них всегда терпят неудачу, когда я запускаю весь тестовый класс или с maven.Я понимаю вещи до и после в Junit и думал, что @Rule справится с этим хорошо, но, очевидно, это не так, или есть кое-что, что я не могу понять.Может кто-нибудь, пожалуйста, посмотрите на это?

...