7

我试图弄清楚如何为需要 C# 中的套接字的服务器应用程序编写单元测试。我需要从套接字读取以处理请求。在 Java 中,我可以通过使用 Streams 来避免使用套接字,因此在编写单元测试时,我可以轻松地将字符串转换为流。

// ====== 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# 中实现这一点,以便我可以创建没有套接字的流?以及如何写入 Stream 并再次阅读以查看消息是否正确?

4

2 回答 2

4

[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,弥敦道

于 2013-03-20T21:28:44.733 回答
3

您可以在 C#中使用MemoryStream 。

于 2013-03-20T21:10:33.563 回答