我有一个存在通信抽象层的应用程序.该层的每个实现(称为连接器)为我的应用提供了与连接的对等体(例如,通过HTTP,TCP套接字,UDP套接字等)交换数据的方法.
例如,我有一个Connector_Tcp类来实现诸如读,写,打开和关闭之类的方法.
我需要为该类写一个单元测试.我知道单元测试应尽可能少的依赖.不幸的是,在这种情况下,依赖关系是一个系统资源:一个socket;我不能绕过它.
我需要一些关于单元测试这个课程的建议.
在我看来,即使这个类正在使用系统资源,它应该被测试为所有其他连接器,以确保它符合我的应用程序建立的标准.
我担心这样的事情是有约束力的碰撞(地址已经在使用中的错误)和阻塞.我不希望单元测试失败,因为端口已被系统服务使用,与我的应用无关.
我在我的日子做了很多单元测试,但是没有一个依赖于这样一个低级别的资源是套接字.
您将如何处理单元测试基于套接字的类?为每个单元打开一个插座?使用单个服务器类,然后使用手动定义的套接字资源连接到它并测试它?
我想我的问题真的是如下:
如果单元测试失败…我怎么知道:
>套接字已被另一个进程使用;
单位测试写得不好要么
该方法的行为不正确(这是单位测试值得的).
我需要单元测试才能测试方法是否已经正常运行…
@H_301_27@>在您的安装程序中创建一个服务器套接字,将其关闭.根据您是否支持连接到服务器套接字的许多客户端,您可能希望在测试方法中执行该部分.
>假设您可以在客户端代码中指定要连接的端口,请将服务器套接字绑定到端口0(临时端口),然后在客户端代码中使用.这将消除绑定到已经使用的端口的问题.
>在套接字上设置超时.如果您的测试由于某些意外的原因而失败,您不希望它等待永久连接.
>您需要能够交织客户端/服务器的行为.例如,您将需要测试如果服务器通过客户端读/写方式将连接的一端关闭一半,则会发生什么.异步I / O或多线程都可以做到这一点.我不知道你在PHP中的处理方式.