nho*_*ass 7 java android unit-testing mocking mockito
我有一个模拟类的静态方法的测试用例java.lang.System
:
@Test
fun `getLocalTime()`() {
// Arrange
val staticMock = Mockito.mockStatic(System::class.java)
Mockito.`when`(System.currentTimeMillis()).thenReturn(1000L)
// Action
val res = deviceTimeProvider.getLocalTime()
// Assert
Truth.assertThat(res).isEqualTo(1000L)
staticMock.close()
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,我得到了这个错误:
org.mockito.exceptions.base.MockitoException:不可能模拟 java.lang.System 的静态方法以避免干扰类加载,从而导致无限循环
为什么会出现这种情况?我如何模拟java.lang.System
类的方法?
虽然 Mockito 自3.4.0版本以来允许模拟静态方法,但不允许模拟Thread
和System
静态方法,请参阅github 上的评论
最后请注意,Mockito 禁止模拟 System(和 Thread)的静态方法。这些方法与发生在同一线程中的类加载密切相关。在某些时候,我们可能会在类加载中添加检测,以暂时禁用其中的静态模拟,从而模拟这些类,同时我们还需要禁用它们的强化属性。然而,您可以轻松地模拟 Instant.now()。
归档时间: |
|
查看次数: |
10332 次 |
最近记录: |