我们目前正在使用 java 和 kotlin 项目,慢慢将整个代码迁移到后者。
是否可以使用 Mockk 模拟 Uri.parse()
等静态方法?
示例代码是什么样子的?
最佳答案
除了 oleksiyp 回答:
2022 年更新:
你必须使用 unmockStatic()
。如果自动取消模拟对您不起作用,请阅读其他答案。
mock 1.8.1 之后:
Mockk 1.8.1 版已弃用以下解决方案。在那个版本之后你应该这样做:
@Before
fun mockAllUriInteractions() {
mockkStatic(Uri::class)
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path")
}
mockkStatic
每次调用都会被清空,所以你不再需要 unmock 了
已弃用:
如果您需要模拟的行为始终存在,而不仅仅是在单个测试用例中,您可以使用 @Before
和 @After
模拟它:
@Before
fun mockAllUriInteractions() {
staticMockk<Uri>().mock()
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path") //This line can also be in any @Test case
}
@After
fun unmockAllUriInteractions() {
staticMockk<Uri>().unmock()
}
这样,如果您希望类的更多部分使用 Uri 类,您可以在一个地方模拟它,而不是到处使用 .use
污染您的代码。
关于java - 使用 Mockk 模拟静态 java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762409/