0

问题:尝试执行 PowerMockito.doNothing() 时引发 Nullpointer 异常。

我需要创建一个 partialMockObject 类,该类将返回一个私有方法值并且对另一个私有 setter 方法不执行任何操作。

如果我用 supress() 替换 doNothing() 但我想弄清楚这一点,我就能让它工作。

代码:

@Test
public void testPowerMockito() throws Exception
{       

    final String methodName1 = "Method1";
    final String methodName2 = "Method2";

    //Using PowerMockito
    ObjectToTest partialMockObject = PowerMockito.spy(new ObjectToTest());

    //Mock the private method, expect that a false
    PowerMockito.doReturn(false).when( partialMockObject,methodName1 );

    //Do Nothing on the void private setter     
    PowerMockito.doNothing().when( ObjectToTest.class,methodName2 );

    String result = partialMockObject.methodToTest();

    assertEquals("Fail","",result);

    //Confirms that the private method was called
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);

}

StackTrace:' org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl. java:43) 在 org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:104)

4

1 回答 1

1

我已经广泛使用 PowerMockito 来尝试处理在一些棘手的遗留 Java 代码上编写单元测试。我能告诉你的最好的事情是,并非你认为应该工作的所有东西都能奏效,而且在线示例的年龄和质量参差不齐。间谍用于执行 verifyPrivate,但我使用 PowerMockito 模拟私有方法调用收效甚微。

你确实有几个可能的举措:保护私有方法(然后你可以使用 Mockito 部分模拟来做你想做的事情),或者重构代码,这样你就没有这些私有方法并且可以@模拟另一个对象,因此可以完全模拟控制公共调用。当然,我不知道您正在处理哪些其他限制。

于 2012-01-13T16:40:15.757 回答