我一直在使用JUnit和Mockito来尝试测试特定网络模块如何影响其输入和输出流。为了便于测试,我创建了一组模拟网络对象流(即ObjectInputStream的实例和ObjectOutputStream的实例)并删除了我想要以时尚方式进行测试的方法类似于以下代码段:
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import static org.mockito.Mockito.*;
import org.junit.Test;
public class NetworkTester
{
@Test
public void ModuleRespondsToServerRequest() throws Exception
{
ObjectInputStream mockClientIn = mock(ObjectInputStream.class);
ObjectOutputStream mockClientOut = mock(ObjectOutputStream.class);
when(mockClientIn.readObject()).thenReturn("Sent from Server");
// Initialize module and connect it to the network...
verify(mockClientOut, timeout(100).atLeastOnce()).writeObject(isNotNull());
}
}
但是,当我尝试编译并运行此代码时,我在“when(mockClientIn.readObject())。thenReturn(”从服务器发送“);”行中得到一个空指针异常。我相信这是由于“readObject()”函数在存根对象上调用时返回空指针的事实引起的,但我不知道是否可以绕过此行为。
有没有办法使用Mockito来存根这个函数(或类似的null返回函数)?在此先感谢您的帮助。
答案 0 :(得分:2)
Mockito无法模仿readObject()
,因为它是最终的。您可以尝试PowerMockito或考虑重新设计代码以便于测试。查看有关主题here的讨论。
答案 1 :(得分:2)