如何使用Moq修改模拟方法的调用参数?

时间:2010-02-02 11:40:12

标签: c# unit-testing moq

是否可以修改模拟方法的调用参数?特别是我希望将以下示例中的buffer更改为预先填充的字节数组。

例:
int MockedClass.Read(byte[] buffer, int offset, int count)

说明:
调用Read将从count读取的offset个字节加载到提供的字节数组buffer中。

现在我希望在我的应用程序代码中调用Read之后填充缓冲区。这可能吗?

如果是,我将如何继续拨打Read?我想连续调用每次都返回一个不同的缓冲区。

编辑:

使用Setup命令,如下所示:

MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback( (byte[] buffer, int offset, int count) => buffer[0] = 0xAA);

在执行单元测试时给出了一个奇怪的问题:一旦调用Read并执行委托代码(buffer[0] = 0xAA),调试器就会显示buffer实际为{ {1}}并且执行此命令后单元测试执行停止。我的语法是不是或者是一个错误?

1 个答案:

答案 0 :(得分:15)

您可以使用Callback方法。这样的事情(来自记忆):

var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
    .Callback((buffer, offset, count) => /* fill in buffer here */);