试图模拟System类方法或任何其他Final类方法

时间:2018-03-13 11:38:57

标签: java mocking mockito powermock

我正在尝试模拟System类以获取currentTimeMillis()的常量值。 由于我不能使用Mockito来模拟最终类我使用的是PowerMock,但是当模拟System.currentTimeMillis()时,我发现错误“无法解析方法(长)”。

我的代码如下:

PowerMockito.mockStatic(System.class);
when(System.currentTimeMillis()).thenReturn(CURRENT_TIME_STAMP);

我还注释了我的课程:

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class DateTimeUtilsTest {

2 个答案:

答案 0 :(得分:1)

解决。

应该是

PowerMockito.when(System.currentTimeMillis()).thenReturn(CURRENT_TIME_STAMP);

或静态导入PowerMockito

import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;

类似地,可以模拟任何System类方法,也可以模拟任何其他最终类。

答案 1 :(得分:1)

这就是为什么你应该首先编写测试,然后你不要编写不可测试的代码。

您的代码不应直接访问瞬态静态,而是通过可以模拟的组件。