mongodb - Testcontainer 不适用于 Kotlin 和 Quarkus - 连接到服务器 mongo:27017 时监视器线程中出现异常
问题描述
我正在尝试使用Quarkus、Kotlin、MongoDB和TestContainers创建一个简单的待办事项应用程序。我正在使用 testcontainers 来测试我与 mongodb 的集成。不幸的是,我的测试没有像我预期的那样工作。这是我的测试用例,我不确定出了什么问题。我可以从日志中看到 mongodb 的测试容器已启动,并且我正在将 replicaSetUrl 设置为属性。
@QuarkusTest
class TodoResourceIT {
@Container
private val mongoDbContainer: MongoDBContainer = MongoDBContainer("mongo:4.2").withExposedPorts(27017)
init {
mongoDbContainer.start()
System.setProperty("quarkus.mongodb.connection-string", mongoDbContainer.replicaSetUrl)
}
@Test
fun shouldReturn200OK() {
given().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.body(Todo("1", "Find", "Find the letter F"))
.`when`().post("/api/todos").then().statusCode(200)
}
}
这是我的完整源代码:https ://github.com/faskan/todo-kotlin-quarkus
我看到了一个类似的线程Integration testing with Testcontainers + Quarkus + MongoDB。但该解决方案仅适用于 Java。这是我使用 Java 的示例实现,效果很好。https://github.com/faskan/todo-java-quarkus
我现在面临的问题是 Kotlin。
堆栈跟踪:
INFO [org.mon.dri.cluster] (cluster-ClusterId{value='60d34ff2ffb00164d8f60cbc', description='null'}-mongo:27017) Exception in monitor thread while connecting to server mongo:27017: com.mongodb.MongoSocketException: mongo
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:211)
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:75)
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65)
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144)
at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.net.UnknownHostException: mongo
at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:800)
at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:886)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1507)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1366)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1300)
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:203)
解决方案
你的 quarkus 版本是哪个?
您可以使用 QuarkusTestResourceLifecycleManager进行归档,我已经使用 kotlin 对其进行了测试并且工作正常。这里有一个关于如何做到这一点的例子
推荐阅读
- php - 无法在 PHP MySQL 中更新密码
- node.js - 如何对嵌套的对象数组进行分组
- html - VBA HTML 对象库不支持所有 HTML 标签
- google-sheets - 依赖下拉菜单,根据第一个下拉菜单的选择缩小范围?
- bash - 如何正确运行具有while read语句和嵌套在Bash中的另一个for循环的for循环第n次
- javascript - 由于某种原因未调用 Javascript 函数
- python - 改进 tesseract 检测
- sql - SQL 条件顺序
- python - python中keras和tensorflow.keras之间的意外性能差异
- java - 在java中的不同时刻播放多种声音