首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为micronaut for mongodb设置测试容器

为micronaut for mongodb设置测试容器
EN

Stack Overflow用户
提问于 2020-11-05 23:44:02
回答 2查看 908关注 0票数 1

我正在尝试Testcontainers,Micronaut和Kotlin,不知何故Micronaut不想替换我正在启动的MongoDB的动态端口,到目前为止它还在工作。

我还没有替换(/src/ application-test.yml /resources)下的测试资源

代码语言:javascript
复制
micronaut:
  application:
    name: abc
mongodb:
  connection-pool:
    max-size: 20
  uri: mongodb://${MONGO_HOST:localhost}:${MONGO_PORT}

下面是我的设置代码:

代码语言:javascript
复制
// class .....
companion object {
        private lateinit var embeddedServer: EmbeddedServer
        lateinit var mongoContainer: MongoContainer

        @BeforeAll
        @JvmStatic
        internal fun beforeAll() {
            mongoContainer = MongoContainer()
            mongoContainer.start()
            assertThatPortIsAvailable(mongoContainer)

            System.setProperty("MONGO_HOST", mongoContainer.containerIpAddress)
            System.setProperty("MONGO_PORT", mongoContainer.getPort().toString())

            println(System.getProperties()) // THE ENV VAR IS AVAILABLE HERE
            println("aaaaaaaa" + mongoContainer.getPort())

            embeddedServer = ApplicationContext.run(EmbeddedServer::class.java, PropertySource.of(
                    "test", mapOf(
                    "mongo.uri" to mongoContainer.containerIpAddress,
                    "mongo.port" to mongoContainer.getPort())
            ))
        }

错误消息:消息:无法解析占位符${MONGO_PORT}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 19:38:29

这对我在Kotlin中用micronauts运行Testcontainers很有帮助。

代码语言:javascript
复制
import a.b.c.model.NewOffer
import a.b.c.model.QuantityType
import io.micronaut.test.extensions.junit5.annotation.MicronautTest
import io.micronaut.test.support.TestPropertyProvider
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.testcontainers.containers.MongoDBContainer
import org.testcontainers.junit.jupiter.Testcontainers
import javax.inject.Inject

@Testcontainers
@MicronautTest()
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
internal class OfferRepositoryTest() : TestPropertyProvider {

    @Inject
    private lateinit var offerRepository: OfferRepository

    private val mongoDBContainer: MongoDBContainer = MongoDBContainer("mongo:4").apply { start() }

    @Test
    internal fun getEmptyOffers() {
        val find = offerRepository.find()
        assertThat(find).isEmpty()
    }

    override fun getProperties(): MutableMap<String, String> {
        return mutableMapOf(
                "MONGO_HOST" to mongoDBContainer.containerIpAddress,
                "MONGO_PORT" to "${mongoDBContainer.getMappedPort(27017)}"
        )
    }
}

并且src/main/resources/application.yml看起来像是由micronaut生成的

代码语言:javascript
复制
mongodb:
  connection-pool:
    max-size: 20
  uri: mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017}
票数 3
EN

Stack Overflow用户

发布于 2020-11-06 02:57:21

您最好通过实现TestPropertyProvider来提供完整的mongodb.uri

并且我认为您希望使用mongoContainer.getMappedPort(27017)获得实际的端口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64700540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档