我正在一个Spring Boot Kotlin项目中设置集成测试,使用的是testcontainers:mongodb。
我已经设置了一个MongoDBContaine,一切都按预期工作-应用程序连接到mongodb和测试与存储库(例如保存,删除)工作得很好,但我注意到,测试运行(成功)mongodb.驱动程序抛出一个异常在最后-似乎容器没有被优雅地关闭/停止-这是可能的吗?
如何启动容器的示例
companion object {
@Container
var mongoDBContainer = MongoDBContainer("mongo:4.4.2")
@JvmStatic
@DynamicPropertySource
fun setProperties(registry: DynamicPropertyRegistry) {
registry.add("spring.data.mongodb.uri") { mongoDBContainer.replicaSetUrl }
}
}
试验方法
@Test fun someTest() {
autowiredRepository.save(document)
...
...
}
至于运行类,我只是在它上面使用@Testcontainers注解和@SpringBootTest,没有别的。
我最后得到的例外是
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:112) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:131) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:647) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:512) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:355) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:315) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:215) ~[mongodb-driver-core-4.2.3.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar:na]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
2条答案
按热度按时间qjp7pelc1#
您是否尝试排除spring提供的默认mongoEmbedded?
我不知道在Kotlin里是什么意思但在Java里是这样的:
dz6r00yl2#
我也遇到了同样的问题,我通过从容器中删除注解
@Container
并手动将其作为Singleton启动来解决这个问题。原因是@Container
启动了多个容器。第一个容器被测试成功使用,而其他容器则抛出了com.mongodb.MongoSocketReadException: Prematurely reached end of stream
异常。替换:
用这个