我必须模拟该功能
bool ReceiveData(long channelID, int count, int timeOut, out byte[] data);
困难在于 out 参数每次调用时都应该返回不同的内容。
我想回来
serialByteSequence1
第一次 ReceiveData()
被呼叫serialByteSequence2
第二次ReceiveData()
被叫,但我正在努力如何使用
SetupSequence
作为 out
参数?
byte[] serialByteSequence1 = new byte[] { 0xAA, 0x55, 0x01, 0x00, expectedCheckSum0, expectedCheckSum1, 0x55, 0xAA, 0x55, 0x01, 0x00, expectedCheckSum0 };
byte[] serialByteSequence2 = new byte[] { expectedCheckSum1, 0x55, 0xAA };
mockPort.SetupSequence(mock => mock.ReceiveData(It.IsAny<long>(), It.IsAny<int>(), It.IsAny<int>(), out It.Ref<byte[]>.IsAny))
这样解决了:
public delegate void methodDelegate(long channelId, int count, int timeout, out byte[] data);
mockPort.Setup(mock => mock.ReceiveData(It.IsAny<long>(), It.IsAny<int>(), It.IsAny<int>(), out It.Ref<byte[]>.IsAny))
.Callback(new methodDelegate((long ch, int count, int timeout, out byte[] data) =>
{
switch(methodCount)
{
case 0: data = serialByteSequence1; break;
case 1: data = serialByteSequence2; break;
default: data = Array.Empty<byte>(); break;
}
methodCount++;
}))
.Returns(methodCount <= 2);