gpt4 book ai didi

php - 单元测试套接字

转载 作者:可可西里 更新时间:2023-10-31 22:49:05 24 4
gpt4 key购买 nike

问候 Stackoverflowers,

我有一个存在通信抽象层的应用程序。该层中的每个实现称为连接器,为我的应用程序提供了一种与连接的对等方交换数据的方法(例如:通过 HTTP、TCP 套接字、UDP 套接字等)。

例如,我有一个 Connector_Tcp 类,它实现了诸如readwriteopen关闭

我需要为该类(class)编写单元测试。我知道单元测试应该有尽可能少的依赖。不幸的是,在那种情况下,依赖项是系统资源:套接字;我无法绕过它。

我需要一些关于如何对这门课进行单元测试的建议。

在我看来,即使此类正在使用系统资源,也应该像所有其他连接器一样对其进行测试,以确保它符合我的应用程序建立的标准。

我担心绑定(bind)冲突(Address already in use 错误)和阻塞等问题。我不希望单元测试失败,因为该端口已被与我的应用程序无关的系统服务使用。

我这几天做了很多单元测试,但没有一个依赖于套接字这样的低级资源。

您将如何对依赖于套接字的类进行单元测试?为每个单元打开一个 socket ?使用单个服务器类,然后使用手动定义的套接字资源连接到它并测试它......?

我想我的问题确实如下:

如果单元测试失败...我怎么知道:

  • 套接字已被另一个进程使用;
  • 单元测试写得不好;或
  • 该方法行为不当(这是单元测试的值(value)所在)。

我只需要单元测试来测试方法是否正常运行...

最佳答案

我已经编写了一个类似的抽象层,尽管是在 C/C++ 中,并且我有机会对基于套接字的代码进行单元测试。我不知道这里是否有任何固有的特定于 PHP 的东西,所以我只提供我能提供的通用建议。

  • 在您的设置中创建一个服务器套接字,在拆卸时将其关闭。根据您是否支持连接到服务器套接字的许多客户端,您可能希望在测试方法中执行该部分。
  • 假设您可以在客户端代码中指定要连接的端口,将服务器套接字绑定(bind)到端口 0(临时端口),然后在客户端代码中使用它。这将消除绑定(bind)到已在使用的端口的问题。
  • 在套接字上设置超时。如果您的测试由于某些意外原因而失败,您不希望它永远挂起等待连接。
  • 您需要能够交织客户端/服务器行为。例如,您需要测试如果服务器在客户端读/写过程中途关闭其连接端会发生什么情况。异步 I/O 或多线程都可以完成这项工作。我不确定您可以使用 PHP 做什么。

关于php - 单元测试套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4543773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com