问题描述
我的代码设置如下:
SomeService
我正在为 @MicronautTest(startApplication=false)
internal class SomeServiceTest {
@Inject
private lateinit var someRepository: SomeRepository
@MockBean(SomeRepository::class.java)
@Primary
fun someRepository = mock(SomeRepository::class.java)
@Inject
private lateinit var someService: SomeService
@Test
fun `some test`() {
...
}
}
编写单元测试,如下所示:
@MockBean(MongoClient::class.java)
@Primary
fun mongoClient = mock(MongoClient::class.java)
我认为由于我已经模拟了存储库实例,它不会实例化 Mongo DB 的调用,但是当测试开始时它会实例化与 mongo 的连接,我无法理解为什么会发生这种情况。为什么要实例化与 MongoDB 的连接?
我尝试通过以下方式嘲笑 Mongo 客户端:
@MicronautTest(startApplication=false,packages=["foo.bar.service","foo.bar.repository"])
它可以工作,这次没有连接到 Mongo DB,所以出于某种原因,所以在第一种情况下,它正在实例化 Monog Client 的实例,即使我已经模拟了 SomeRepository。
谁能告诉我,为什么会发生这种情况,我怎样才能达到我想要的结果?
编辑: 我累了 Micronaut 测试中的包,将被扫描的包范围限制在我的包内,像这样
{{1}}
但即使这样也无济于事,出于某种原因,实例化了与 Mongo DB 的连接,这意味着出于某种原因创建了 Mongo 客户端。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)