不带参数的函数的 Moq 设置序列

问题描述 投票:0回答:1

我必须模拟该功能

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))
c# unit-testing moq out
1个回答
0
投票

这样解决了:

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);
© www.soinside.com 2019 - 2024. All rights reserved.