使用套接字的c#单元测试
本文关键字:单元测试 套接字 | 更新日期: 2023-09-27 18:04:52
我想弄清楚如何为需要c#套接字的服务器应用程序编写单元测试。为了处理请求,我需要从套接字读取数据。在Java中,我可以通过使用流来避免套接字,因此在编写单元测试时,我可以轻松地将字符串转换为流。
// ====== Input ======
InputStream socketInputStream = new InputStream(socket.getInputStream());
// or using string instead like this
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(socketInputStream));
// ====== Output ======
OutputStream socketOutputStream = new OutputStream(socket.getOutputStream());
// I need to write byte[] to the stream
BufferedOutputStream out = new BufferedOutputStream(socketOutputStream);
我只找到了NetworkStream(),但它也需要一个套接字。
我如何在c#中实现这一点,这样我就可以创建没有套接字的流?我如何写入流并再次读取它以查看消息是否正确?
[nkvu -将此从评论中移出,并根据张贴者的问题对我的评论进行回答;不是想抢安德烈的风头]
在Java中,你做的是:
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());
在你的单元测试中(我假设,基于你原来的问题)。
在c#中你可以这样做:
Stream socketInputStream = new MemoryStream(Encoding.UTF8.GetBytes("string"));
这将是(注意我有一段时间没有使用真实的Java了)c#的等价物。因为MemoryStream只是Stream的一个子类,你可以使用一般的Stream方法从它读取数据(例如read())。
你也可以写内存流,例如:
bytes[] toWrite = Encoding.UTF8.GetBytes("Write to stream");
Stream writeToStream = new MemoryStream();
writeToStream.Write(toWrite, 0, toWrite.Length);
HTH,内森
你可以在c#中使用MemoryStream