16

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

我发现有时由于 tcp 服务器关闭而导致连接被拒绝时,我会遇到奇怪的连接问题,或者有时在调用接收时可能会出现异常。

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

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

我只是不喜欢这样一个事实,即有时我可能会遇到奇怪的连接/接收问题,我想知道如何正确编写单元测试,我可以在将来重用/扩展以确保之前工作的所有内容仍然可以工作以防我的代码或他们的代码更改。

谢谢

4

2 回答 2

17

你应该有两种测试:

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

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

于 2011-11-10T07:18:34.207 回答
2

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

然而,话虽如此,UT 可能更难解决一些问题。Keepalive 问题,可能是路由等外部问题。但是,如果您使用真正的侦听套接字(而不是模拟连接),那么它就是真正的 TCP。

于 2011-11-08T04:11:26.243 回答