gpt4 book ai didi

mongodb - Kotlin 跨 junit 测试共享伴随对象

转载 作者:行者123 更新时间:2023-11-28 20:27:37 29 4
gpt4 key购买 nike

我有一个集成测试,我在其中启动一个嵌入式 MongoDB 作为伴随对象。我想重用这段代码,但我不确定继承是否可行(如果可能)。

这是一个 Spring Boot 应用程序:

这是我的测试:

@RunWith(SpringRunner::class)
@SpringBootTest
class RequestRepositoryTest {

@Autowired lateinit var requestRepository: RequestRepository

companion object {
private val starter = MongodStarter.getDefaultInstance()
private var _mongod: MongodProcess? = null
private var _mongo: MongoClient? = null

@BeforeClass
@JvmStatic fun beforeTest(){
val port = 27017
val _mongodExe = starter.prepare(MongodConfigBuilder()
.version(Version.Main.DEVELOPMENT)
.net(Net("localhost", port, Network.localhostIsIPv6()))
.build())
_mongod = _mongodExe.start()
_mongo = MongoClient("localhost", port)
}

@AfterClass
@JvmStatic fun afterTest(){
_mongod?.stop()
}
}

@Test
fun store() {
val id = requestRepository.store(Request(requestId = "123"))
assertNotNull(id)
}

}

我的存储库类:

@Repository
class RequestRepository @Autowired constructor(val datastore: Datastore)
{
fun store(request : Request) : String =
datastore.save(request).id.toString()
}

所以我的问题是在 Kotlin 中“正确”的方法是什么。

更新编辑:作为外部对象,测试现在看起来更清晰,并且 JUnit 外部资源可跨测试类完全重用:

谢谢@Lovis

@RunWith(SpringRunner::class)
@SpringBootTest
class RequestRepositoryTest {

companion object {
@ClassRule
@JvmField
val mongoServer = MongoServer
}

@Autowired lateinit var requestRepository: RequestRepository

@Test
fun store() {
val id = requestRepository.store(Request(requestId = "123"))
assertNotNull( id )
assertTrue { ObjectId.isValid(id) }
}

最佳答案

您应该能够使用 jUnit 的 @ClassRuleExternalResource 实现您想要的。不需要 Kotlin 魔法 :-)

在单独的文件中定义一个对象:

object MongoServer  : ExternalResource() {
@Throws(Throwable::class)
override fun before() {
// before class
}

override fun after() {
// after class
}
}

然后在每个测试中使用它:

companion object {
@ClassRule
@JvmField
val mongoServer = MongoServer
}

ClassRule 注释在这里起到了作用,companion object 是使它成为静态所必需的,@JvmField 注释是必要的现场公众。这些是 jUnit 规则系统的限制。

关于mongodb - Kotlin 跨 junit 测试共享伴随对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921193/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com