我正在尝试找出如何为需要 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 - 根据发帖人针对我的评论提出的问题,将其从评论中移出并放入答案中;不是想抢@Andrey 的风头]
所以在 Java 中你正在做:
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());
在你的单元测试中(我假设,基于你原来的问题)。
在 C# 中你可以这样做:
Stream socketInputStream = new MemoryStream(Encoding.UTF8.GetBytes("string"));
那将是(注意我已经有一段时间没有开发真实世界的 Java 了)一个 C#-ish 等价物。因为 MemoryStream 只是 Stream 的子类您可以使用通用的 Stream 方法从中读取数据(例如 Read())。
您也可以写入 MemoryStream,例如:
bytes[] toWrite = Encoding.UTF8.GetBytes("Write to stream");
Stream writeToStream = new MemoryStream();
writeToStream.Write(toWrite, 0, toWrite.Length);
HTH,内森
关于c# 使用套接字进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534694/