【问题标题】:Xunit test function with Socket connection( ModbusTCP/IP)Socket 连接的 Xunit 测试功能(ModbusTCP/IP)
【发布时间】:2021-06-30 22:01:52
【问题描述】:

首先,我想为我糟糕的英语道歉。它不是我的母语。

我编写了一个 API 来与特定的电机控制器进行通信。 API 和电机控制器之间的连接是通过 ModbusTCP/IP。我使用了一个 Socket 连接来实现这一点,它发送和接收字节数组。

现在我有一些功能问题,我想通过编写单元测试来识别问题来解决,因为控制器会根据其中的当前状态返回不同的数据,这使得调试变得困难。

我想使用 Xunit 进行测试,因为我在其他一些项目中使用了它。 但我不知道如何开始对使用 Socket 连接的函数进行单元测试。 很难解释我的代码中的逻辑是如何工作的,但是如果你看一下它,如果你有兴趣帮助我,就很容易理解。

您可以在 Github 上查看我的项目: https://github.com/SimonOVT/DryveD1API/tree/Basic-Features

例如: 马达控制器有一个状态字。我可以通过以下方式请求:

data = new byte[] {0, 0, 0, 0, 0, 13, 0, 43, 13, 0, 0, 0, 96, 65, 0, 0, 0, 0, 2}
_ = s.Send(data, data.Length, 0);
byte[] bytesReceived = new byte[24];
_ = s.Receive(bytesReceived, bytesReceived.Length, 0);

收到的字节数如下所示:[0, 0, 0, 0, 0, 15, 0, 43, 13, 0, 0, 0, 96, 65, 0, 0, 0, 0, 2, 33 , 2]

如果我从电机控制器向 ControlWord 写入内容,其工作方式与读取 StatusWord 相同。

我如何才能为包含此通信逻辑的函数伪造 bytesReceived 中的数据?:

  1. 读取 StatusWord:期待我的虚假数据。
  2. 编写 ControlWord。
  3. 读取 StatusWord:预期不同的假数据。

我想开始测试这个控制器中的初始化函数,它基本上有这个逻辑。 https://github.com/SimonOVT/DryveD1API/blob/Basic-Features/DryveD1API/Controllers/InitController.cs

感谢您的帮助。

【问题讨论】:

    标签: c# unit-testing sockets xunit modbus-tcp


    【解决方案1】:

    我有类似的情况,从未尝试测试实际的 Receive 事件。我所做的是在 Receive 事件之后对函数进行单元测试。在大多数情况下,该函数可能不会返回任何数据(因此,您不能直接对该函数进行单元测试)。

    在这种情况下,您可以将来自该函数的所有消息(例如)记录到一个文本文件中,然后您可以对该函数的结果进行单元测试。

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 2012-05-25
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2013-01-23
      相关资源
      最近更新 更多