首先,我要为我糟糕的英语道歉。这不是我的母语。
我已经编写了一个API来与特定的电机控制器进行通信。API与电机控制器之间的连接采用ModbusTCP/IP协议。我使用了一个套接字连接来实现这一点,它发送和接收字节数组。
现在我有一些功能问题,我想通过编写单元测试来解决这些问题,因为控制器根据当前状态返回不同的数据,这使得调试变得困难。
我想在测试中使用Xunit,因为我在其他一些项目中使用了Xunit。但我不知道如何开始对使用套接字连接的函数进行单元测试。在我的代码中很难解释逻辑是如何工作的,但是如果您有兴趣帮助我,如果您查看了它,就很容易理解它。
你可以看看我在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);
bytesReceived的外观如下: 0,0,0,0,0,0,15,0,43,13,0,0,0,96,65,0,0,0,0,2,33,2
我可以影响StatusWord,如果我从电机控制器写东西给ControlWord,它的工作原理和读取StatusWord一样。
如何在bytesReceived中为包含此通信逻辑的函数伪造数据?:
StatusWord:期待不同的假数据。
我想开始测试这个控制器中的Init函数,它基本上有这个逻辑。https://github.com/SimonOVT/DryveD1API/blob/Basic-Features/DryveD1API/Controllers/InitController.cs
谢谢你的帮助。
发布于 2022-01-05 12:35:38
我也有类似的情况,从来没有尝试过测试实际的接收事件。我所做的就是在接收事件之后对函数进行单元测试。在大多数情况下,该函数可能不会返回任何数据(因此,不能直接对函数进行单元测试)。
在这种情况下,您可以将来自该函数(例如)的所有消息记录到文本文件中,然后可以对该函数的结果进行单元测试。
https://stackoverflow.com/questions/66946295
复制相似问题