【发布时间】:2018-09-05 00:59:10
【问题描述】:
我在模拟第三方库中的静态方法时遇到问题。运行测试时,我不断收到空指针异常,但我不确定这是为什么。
这是调用静态方法的类和 void 方法,我试图模拟“MRClientFactory.createConsumer(props)”:
public class Dmaap {
Properties props = new Properties();
public Dmaap() {
}
public MRConsumerResponse createDmaapConsumer() {
System.out.println("at least made it here");
MRConsumerResponse mrConsumerResponse = null;
try {
MRConsumer mrConsumer = MRClientFactory.createConsumer(props);
System.out.println("made it here.");
mrConsumerResponse = mrConsumer.fetchWithReturnConsumerResponse();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return mrConsumerResponse;
}
}
以下是不断返回空指针异常的测试。正在生成空指针的具体行是:MRClientFactory.createConsumer(Mockito.any(Properties.class));
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "com.vismark.PowerMock.*")
public class DmaapTest {
@Test
public void testCreateDmaapConsumer() {
try {
Properties props = new Properties();
PowerMockito.mockStatic(MRClientFactory.class);
PowerMockito.doNothing().when(MRClientFactory.class);
MRClientFactory.createConsumer(Mockito.any(Properties.class));
//MRClientFactory.createConsumer(props);
Dmaap serverMatchCtrl = new Dmaap();
Dmaap serverMatchCtrlSpy = spy(serverMatchCtrl);
serverMatchCtrlSpy.createDmaapConsumer();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
【问题讨论】:
-
您使用的是什么版本的 PowerMock + Mockito?当我尝试时,您的代码运行良好(PowerMock 1.7.3 和 Mockito 1.10.19)
标签: java junit mockito powermock