问候Stackoverflowers,
我有一个应用程序,其中存在通信抽象层。此层中的每个实现(称为连接器)为我的应用程序提供了一种与连接的对等方交换数据的方式(例如:通过HTTP,TCP套接字,UDP套接字等)。
每个例子,我有一个Connector_Tcp
类,它实现了诸如 read , write , open 和等方法靠近
我需要为该课程编写单元测试。我知道单元测试应该具有尽可能少的依赖性。不幸的是,在这种情况下,依赖是一个系统资源:一个套接字;我无法绕过它。
我需要一些关于如何进行单元测试的建议。
在我看来,即使这个类正在使用系统资源,它也应该像所有其他连接器一样进行测试,以确保它遵守我的应用程序建立的标准。
我担心绑定冲突(地址已在使用中错误)和阻塞等问题。我不希望单元测试失败,因为该端口已被与我的应用程序无关的系统服务使用。
在我的日子里,我做了很多单元测试,但是没有一个依赖于套接字这样的低级资源。
您如何进行单元测试依赖于套接字的类?为每个单元打开一个插座?使用单个服务器类,然后手动定义的套接字资源连接到它并测试它?
我想我的问题确实如下:
如果单元测试失败......我怎么知道:
我需要单元测试才能测试方法是否表现正常......
答案 0 :(得分:5)
我编写了一个类似的抽象层,虽然在C / C ++中,我有机会对基于套接字的代码进行单元测试。我不知道这里是否有任何固有的PHP特定内容,所以我只会提供一些通用的建议。
答案 1 :(得分:2)
我希望我能正确理解你的问题......如果没有,请告诉我。但我要做的是嘲笑套接字。这将允许您编写一系列单元测试,以确保您的方法在各种情况下都能完成所有正确的事情。
例如,您可以编写一个单元测试,告诉套接字模拟实例抛出“端口不可用”异常。在这种情况下,您可以声明您的方法捕获了异常并使用异常中的相同文本记录它。
对于这个问题更加重要,您可以编写一个单元测试来告诉套接字模拟实例从read()返回一个有效的字节流,然后您可以断言您的方法做了正确的事情那些字节。
所以你实际上并没有测试套接字。您正在设置套接字以模拟某些事件,并且您正在测试您的代码是否适用于套接字正在做正确的事情。
(我在Java,C#,Ruby和JavaScript中使用过模拟框架。我从来没有使用过PHP,但我打赌它有一些很好的模拟框架)。
编辑:是的,PHP有一些模拟框架。我不能推荐一个,但这里有一对我能找到:PHPUnit和LastCraft