当前位置: 首页 > 知识库问答 >
问题:

使用PowerMockito测试静态方法时丢失MethodInvocationException

姬英耀
2023-03-14

我读了几篇关于使用powermockito而不是仅仅使用mockito来测试静态方法的帖子,但是在切换到powermockito之后,我仍然会得到同样的错误。下面是我的类和例外。异常中的两种情况都不能解释我的错误。

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends AbstractTestNGSpringContextTests {
    @Mock
    Object1 o1;

    @BeforeMethod
    public void init() {
        mockStatic(ClassToBeMocked.class);

        PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
    }

最后一行代码导致这个异常org.mockito.exceptions.Misusing.MissingMethodInvocationException:when()需要一个参数,该参数必须是'a mock上的方法调用‘。例如:when(mock.getarticles()).ThenReturn(articles);

此外,出现此错误的原因可能是:1。您使用final/private/equals()/hashCode()方法中的任一个作为存根。这些方法不能被截取/验证。不支持在非公共父类上声明的模拟方法。2.内部when()不是对mock而是对其他对象调用method。

共有1个答案

林运浩
2023-03-14

我实际上也在纠结于一个类似的问题,但我确实看到了上面的一些不对的地方。@RunWith注释是JUnit库的一部分。AbstractTestNGSpringContextTests和@BeforeMethod是TestNG库的一部分。这可能就是你遇到问题的原因。除非有人想反驳这种说法,否则我相信这两个单元测试库并不是互相工作的。至少不是那样。

@RunWith(PowerMockRunner.Class)将无法将@BeforeMethod拾取为org.junit.Before。

 类似资料:
  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 当所有参数都在使用匹配器时,为什么我会得到这个异常?如何解决?我调试了它,发现返回null。 当我将注释添加到测试类并运行测试时,junit不会做出响应。为什么? 编辑 我试着不使用论据匹配器,结果

  • 我使用web上的各种解决方案尝试了这个解决方案,但无法找到代码中的错误。我需要为静态方法调用存根,因为我需要它用于遗留代码。如何使用PowerMockito模拟静态方法?

  • 问题内容: 我正在为类似于以下示例的方法编写JUnit测试用例: 我在测试类中编写了以下测试用例: 现在,我想验证是否调用了Sample Sample类的static methodC()。如何使用PowerMockito 1.6实现?我已经尝试了很多东西,但是似乎对我来说没有用。任何帮助表示赞赏。 问题答案: 就我个人而言,我不得不说PowerMock等是您的代码不错的情况下不应该解决的问题的解决

  • 问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。

  • 在尝试模拟InetAddress中的静态方法时,我遇到了奇怪的问题。我成功地能够为许多其他类模拟静态方法,并且一切正常,但InetAddress显示不同的行为。我使用的是JUnit 4. x、Mockito 1.9.5 下面给出了使用Mockito和PowerMock以及InetAddress模拟的测试- 当我将下面给出的方法放入某个实用程序InetAddress中时。getLocalHost()