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

mel*_*aos 12 c# unit-testing tcp-ip

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

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

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

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

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

谢谢

Dro*_*per 14

你应该有两种测试:

  1. 集成测试 - 使用可以发送和接收连接的真正的裸骨TCP服务器.创建具有最低功能的此服务器,并使用它来测试客户端的行为方式.使用简单的TCP服务器,您可以测试客户端如何发送和接收消息以及如何连接和断开与服务器的连接.另一个有用的测试是多个客户端如何连接并向服务器发送消息.
  2. 单元测试 - 使用Mocking可以测试更复杂的场景.您将无法发送或接收消息,但您可以测试客户端的内部逻辑 - 如果两个消息到达,如果出现错误则重新发送,它的行为方式等等.

使用这两种测试,您应该能够涵盖大部分客户的功能