c# 使用套接字进行单元测试

标签 c# unit-testing sockets

我正在尝试找出如何为需要 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/

相关文章:

unit-testing - 函数式编程中的测试

java - Eclipse 中的“未找到 JUnit 测试”

reactjs - 如何在 React 中的 onClick 之后测试 next/link (Nextjs) 获取页面重定向?

iPhone CFSocket 传入/传出消息

c# - 使用 linq 过滤分层列表

c# - DeviceNetworkInformation.IsCellularDataEnabled 始终返回 false

c# - "Method not found"异常。为什么 AppDomain.CurrentDomain.AssemblyResolve 不起作用?

c# - C# 中使用 StyleCop 的命名空间问题

sockets - 通过 udp 套接字发送 float32 值

java - 蓝牙连接失败 "java.io.IOException: read failed, socket might closed or timeout, read ret: -1"