【问题标题】:PowerMockito: Trying to mock System class methods or any other Final class methodPowerMockito:试图模拟 System 类方法或任何其他 Final 类方法
【发布时间】:2023-03-26 16:03:01
【问题描述】:

我正在尝试模拟 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 {

【问题讨论】:

  • 如何将其视为第 3 方依赖/实现关注点,并将其封装在可以轻松实现和模拟/存根的抽象后面。
  • 我对 jmockit 有更好的体验。

标签: java mocking mockito powermock


【解决方案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 类方法或模拟任何其他 final 类。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2016-11-11
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多