【发布时间】:2021-04-14 18:45:34
【问题描述】:
尝试使用 Junit 5 和 micronaut 设置 Test MongoDBContainer,而不是在使用 application.yml 配置的测试环境中盯着随机端口上的 MongoDB。
application.yml
micronaut:
application:
name: feteBirdProductConsumer
mongodb:
uri: "mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017}"
database: "FeteBird-Product"
Junit 测试
@MicronautTest
@Testcontainers
public class ProductListenerTest {
private final IProductProducer iProductProducer;
@Container
private final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"));
public ProductListenerTest(IProductProducer iProductProducer) {
this.iProductProducer = iProductProducer;
}
@BeforeEach
@DisplayName("Mongo Db container starting")
void mongoDbContainerStarting() {
mongoDBContainer.start();
}
@Test
@DisplayName("Check if Mongo db container is up")
void checkIfMongoDbContainerIsUp() {
Assertions.assertTrue(mongoDBContainer.isRunning());
}
@Test
@DisplayName("Should search based on the name")
void shouldSearchBasedOnTheName() {
iProductProducer.findFreeText("string").subscribe(item -> {
System.out.println(item);
});
}
}
shouldSearchBasedOnTheName 方法的返回值来自 application.yml MongoDB 配置。
在测试环境中,我没有向 MongoDB 插入任何值,但该方法已从应用程序 MongoDB 返回值
我想我缺少 mongoDb 的配置,但不太确定如何设置
更新
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ProductListenerTest implements TestPropertyProvider {
@Nonnull
@Override
public Map<String, String> getProperties() {
mongoDBContainer.start();
String address = mongoDBContainer.getHost();
Integer port = mongoDBContainer.getFirstMappedPort();
return CollectionUtils.mapOf(
"MONGO_HOST", address,
"MONGO_PORT", port
);
}
}
例外
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
【问题讨论】:
标签: java junit micronaut testcontainers micronaut-test