【发布时间】: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 中的数据?:
- 读取 StatusWord:期待我的虚假数据。
- 编写 ControlWord。
- 读取 StatusWord:预期不同的假数据。
我想开始测试这个控制器中的初始化函数,它基本上有这个逻辑。 https://github.com/SimonOVT/DryveD1API/blob/Basic-Features/DryveD1API/Controllers/InitController.cs
感谢您的帮助。
【问题讨论】:
标签: c# unit-testing sockets xunit modbus-tcp