【问题标题】:c# unit tests using socketsc# 使用套接字进行单元测试
【发布时间】:2013-03-20 21:04:57
【问题描述】:

我试图弄清楚如何为需要 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 并再次读取它以查看消息是否正确?

【问题讨论】:

  • 可能是MemoryStream,它由一个字节[] 支持。如果你想写一个字符串并且你可以“硬编码”一个编码,你可以使用Encoding.GetBytes之类的东西将字符串转换为字节[]
  • 如果它由 byte[] 支持,我如何使用它从套接字读取?程序必须能够获取流,无论它是由字符串还是套接字创建的

标签: c# unit-testing sockets


【解决方案1】:

[nkvu - 根据发布者针对我的评论提出的问题,将其从 cmets 中移出并进入答案;不想偷@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,内森

【讨论】:

    【解决方案2】:

    您可以在 C# 中使用MemoryStream

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 2011-05-31
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多