У меня есть 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 справится с этим хорошо, но, очевидно, это не так, или есть кое-что, что я не могу понять.Может кто-нибудь, пожалуйста, посмотрите на это?