你如何对tcp连接进行单元测试?

时间:2011-11-08 01:49:46

标签: c# unit-testing tcp-ip

我最近有机会为我的项目编写一个简单的tcp-client,由于我对tcp / ip的无知,我很难让它正常工作。

我发现有时候当tcp服务器关闭时连接被拒绝时,我可能会遇到奇怪的连接问题,或者有时在调用receive时我可能会遇到异常。

由于tcp-server是一个黑盒子而我们无法访问它,我想知道在这种情况下,为此编写单元测试的最佳方法是什么?

我想要么我应该编写一个tcp-server并让它返回某些输入,就像我期望从真实服务器那样,或者只是模拟与返回理想情况数据相关的函数。

我只是不喜欢这样的事实:有时我可能会遇到奇怪的连接/接收问题而且我想知道如何正确编写单元测试,我可以在将来重用/扩展以确保之前的所有工作都应该如果我的代码或代码发生变化,仍然可以使用。

感谢

2 个答案:

答案 0 :(得分:14)

您应该有两种测试:

  1. 集成测试 - 使用可以发送和发送的真正的裸骨TCP服务器 接收连接。创建最小的服务器 功能并使用它来测试客户端的行为方式。用一个 简单的TCP服务器,您可以测试您的客户端如何发送和接收 消息以及它如何与服务器连接和断开连接。另一个 有用的测试是几个客户端连接和发送消息的方式 服务器
  2. 单元测试 - 使用Mocking可以测试更复杂的场景。您 将无法发送或接收消息,但您可以测试 客户端的内部逻辑 - 如果有两条消息,它的行为方式如何 到达,在发生错误时重新发送等。
  3. 使用这两种测试,您应该能够涵盖大部分客户的功能

答案 1 :(得分:1)

对于单元测试,我创建一个简单的套接字服务器(在UT启动时启动)只是为了测试客户端。如果你简单而独立,你将减少运行测试的麻烦。您也可以使用像ncat这样的工具来实现这一点。

然而,有人说可能存在可能难以接受的问题。 Keepalive问题,可能是路由等外部问题。但是如果你使用真正的侦听套接字(而不是模拟连接),它就是真正的TCP。