【问题标题】:How do you bypass static method calls?你如何绕过静态方法调用?
【发布时间】:2015-05-15 01:14:36
【问题描述】:

我有这行干扰单元测试:

OtherClass.staticMethodThatWillErrorIfCalled().isAvailable();

如果它不是静态的,我可以模拟 OtherClass 然后这样做:

Mockito.doReturn(null).when(mockedOtherClass).staticMethodThatWillErrorIfCalled();
Mockito.doReturn(true).when(mockedOtherClass).isGuiMode();

如果调用它会出错,这一事实使我尝试使用 powermockito 是徒劳的。

我不确定我该怎么做。我想要做的就是跳过这一行(这是一个 if 检查)并继续,就好像它返回了 true。最好的方法是什么?

【问题讨论】:

  • 请发布更多信息,整个单元测试将是一个好的开始。是否正在测试类中的静态方法?
  • 嘲笑它。您可以模拟静态。
  • @AlexBuyny 我只是在 ClassToBeTested 中执行一个方法,但该方法具有我所说的 if 检查,它将调用引发错误的静态方法。我不关心在 OtherClass 中测试静态方法或其他任何东西我只想得到一个返回的真实值,以便我可以在 ClassToBeTested 中执行和测试方法
  • @DaveNewton 是的,但是因为它是静态的,所以它会调用该方法,因此会抛出错误。我想跳过该方法。
  • 看看here这篇文章有一些处理静态的方法

标签: junit mocking mockito powermockito


【解决方案1】:

我需要更多信息才能给出更具体的答案,但这就是我的想法......

首先告诉 PowerMockito,您将在 OtherClass 中模拟一个静态方法。

@RunWith(PowerMockRunner.class)
@PrepareForTest(OtherClass.class)

这些是单元测试类中的类级别注释。

然后模拟调用该方法时要做什么。

PowerMockito.mockStatic(OtherClass.class);
Mockito.when(OtherClass.isAvailable()).thenReturn(Boolean.TRUE);

在单元测试的@Before 方法中执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2013-01-08
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多