我们目前正在使用 java 和 kotlin 项目,慢慢地将整个代码迁移到后者。
是否可以使用 Mockk 模拟 Uri.parse()
等静态方法?
示例代码会是什么样子?
原文由 Andrzej Sawoniewicz 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们目前正在使用 java 和 kotlin 项目,慢慢地将整个代码迁移到后者。
是否可以使用 Mockk 模拟 Uri.parse()
等静态方法?
示例代码会是什么样子?
原文由 Andrzej Sawoniewicz 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你调用 mockkSatic()
没有块,不要忘记调用 unmockkStatic()
在调用模拟方法之后。该方法不会自动取消模拟,即使在不调用 mockkStatic()
的不同测试类中,您仍然会获得模拟值,但使用静态方法。
另一种选择是在块内执行模拟方法,然后它将自动取消模拟:
mockkStatic(Uri::class) {
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path")
val uri = Uri.parse("http://test/path")
}
原文由 Tomas Rohovsky 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
除了oleksiyp回答:
2022 年更新:
您必须使用
unmockStatic()
。如果自动解锁不适合您,请阅读其他答案。在 mockk 1.8.1 之后:
Mockk 版本 1.8.1 弃用了以下解决方案。在那个版本之后你应该这样做:
mockkStatic
每次调用都会被清除,所以你不需要再取消模拟了弃用:
如果您需要模拟行为始终存在,而不仅仅是在单个测试用例中,您可以使用
@Before
和@After
模拟它:这样,如果您希望类的更多部分使用 Uri 类,您可以在一个地方模拟它,而不是到处用
.use
污染你的代码。