大家好,
我有一个应用程序,其中存在一个通信抽象层。这个层中的每个实现都被称为连接器(connector),为我的应用程序提供了与已连接对等体交换数据的方法(例如:通过HTTP、TCP sockets、UDP sockets等)。
例如,我有一个名为Connector_Tcp
的类,它实现了诸如read、write、open和close之类的方法。
我需要为该类编写单元测试。我知道单元测试应尽可能少依赖于其他资源。不幸的是,在这种情况下,依赖关系是一个系统资源:一个socket;而我无法绕过它。
我需要一些关于如何进行单元测试这个类的建议。
我认为,即使这个类正在使用一个系统资源,也应该像所有其他的connectors一样进行测试,以确保它符合我的应用程序所建立的标准。
我担心的是绑定冲突(Address already in use错误)和阻塞等问题。我不希望由于端口已经被与我的应用程序无关的系统服务占用而导致单元测试失败。
我曾经做过很多单元测试,但从未依赖于如此低级别的资源,即sockets。
你会如何进行一个依赖socket的类的单元测试呢?为每个单元打开一个socket?使用一个单独的服务器类,然后手动定义socket资源连接到它并测试它...?
我想我的问题实际上是:
如果单元测试失败... 我怎么知道:
- socket已经被另一个进程占用了;
- 单元测试编写得不好;或者
- 方法行为不当(这就是单元测试的价值所在)。
我需要单元测试只测试该方法是否已经正确执行,而不关心其他原因。