我试图在Android Java中测试套接字通信,但似乎无法进行模拟工作。
首先,使用Mockito,mock(Socket.class)
会抛出异常java.lang.VerifyError
。
所以我把我的模拟编码如此:
public void testMyTest(){
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
try{
byte[] buffer = new byte[6];
os.write("poulet".getBytes());
is.read(buffer, 0, 6);
Log.w(LOG_TAG, "Read result:" + (new String(buffer, "UTF-8")));
} catch(IOException e){}
}
但是,当我致电is
时,os
无法从os.write()
读取。原始结果为[B@42204320
,并且以字符串形式显示为������������
。我尝试评论os.write()
,但没有任何改变。
有谁知道如何链接输入流以从输出流中读取?
为了测试我刚刚调用的课程
final Socket mockedSocket1 = new Socket();
final Socket mockedSocket2 = new Socket();
when(mockedSocket1.getInputStream()).thenReturn(is);
when(mockedSocket2.getOutputStream()).thenReturn(os)
这样我的课程就可以获得我要测试的链接输出和输入流。
非常感谢!
答案 0 :(得分:1)
is
的缓冲区将始终为空。
这:ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
只创建一个带有空缓冲区的ByteArrayInputStream
,当你向ByteArrayOutputStream
写一些内容时,该缓冲区不会改变。
public byte [] toByteArray()
创建新分配的字节数组。它的大小是此输出流的当前大小,缓冲区的有效内容已复制到中。 ...
您可以做的是在向ByteArrayInputStream
写一些内容后创建ByteArrayOutputStream
,例如:
try (ByteArrayOutputStream os = new ByteArrayOutputStream();){
byte[] buffer = new byte[6];
os.write("poulet".getBytes("UTF-8"));
try(ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());){
is.read(buffer, 0, 6);
System.out.println("Read result:|" + (new String(buffer, "UTF-8") + "|"));
}
} catch (IOException e) {
}