PowerMokito对私有设置程序NullPointer执行doNothing()



问题:尝试执行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:'java.lang.NullPointerException网址:org.powermock.api.mmockito.internal.expection.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68)在org.powermock.api.mmockito.internal.expection.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:43)在org.powermock.api.mmockito.internal.expection.PowerMockitoStubberImpl.when(PowerMockito Stubberimpl.java:104)

我曾广泛使用PowerMockito,尝试在一些棘手的遗留Java代码上编写单元测试。我能告诉你的最好的一点是,并不是所有你认为应该奏效的事情都会奏效,而且网上的例子年龄和质量参差不齐。间谍的工作是进行verifyPrivate,但我使用PowerMockito模拟私有方法调用几乎没有成功。

你确实有几个可能的步骤:保护私有方法(然后你可以使用Mockito部分mocking来做你想在这里做的事情),或者重构代码,这样你就没有这些私有方法,可以@Mock另一个对象,从而对公共调用拥有完全的mocking控制。当然,我不知道你还受到什么样的限制。

相关内容

  • 没有找到相关文章

最新更新