使用套接字的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#中实现这一点,这样我就可以创建没有套接字的流?我如何写入流并再次读取它以查看消息是否正确?

使用套接字的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