public class ConnectionPointTest {
@Test
public void testMockito() throws IOException {
DataInputStream dataInputStream = mock(DataInputStream.class);
when(dataInputStream.readUTF()).thenReturn("Test");
new JustTest(dataInputStream).doTest();
}
public class JustTest {
DataInputStream dataInputStream;
public JustTest(DataInputStream dataInputStream) {
this.dataInputStream = dataInputStream;
}
public void doTest() throws IOException {
String s = dataInputStream.readUTF();
System.out.println(s);
}
}
}
我在项目中实现了JUnit测试+ Mockito。然后我尝试模拟我的DataInpuStream,在此代码中我有一个例外:
when(dataInputStream.readUTF()).thenReturn("Test");
P.S。 JustTest类仅用于向您展示我要模拟的内容。
有例外:
java.lang.NullPointerException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:337)
at java.io.DataInputStream.readUTF(DataInputStream.java:589)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
...
答案 0 :(得分:3)
您正在尝试模拟最终方法:
public final String readUTF() throws IOException {
return readUTF(this);
}
Mockito(v2.x)支持此功能,但需要其他配置。更多详细信息in the docs:
模拟最终课程和方法是一项令人振奋的选择功能。它结合使用Java代理工具和子类,以实现这些类型的可模拟性。由于此功能与我们当前的机制不同,并且此机制具有不同的局限性,并且我们希望收集经验和用户反馈,因此必须明确激活此功能才能使用;通过创建包含单行的文件
src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
,可以通过模仿扩展机制完成此操作:
mock-maker-inline
因此,创建一个名为org.mockito.plugins.MockMaker
的文件,其内容如下:
mock-maker-inline
将此文件放置在测试类路径上名为mockito-extensions
的文件夹中(如果使用Maven,只需在src/test/resources
中创建此文件夹)
重新运行测试。
使用此配置后,我已成功通过以下方式运行您的测试: