如何使用Moq修改模拟方法的调用参数?
是否可以修改模拟方法的调用参数? 特别是我希望将以下示例中的buffer
更改为预先填充的字节数组。
例:
int MockedClass.Read(byte[] buffer, int offset, int count)
说明:
调用Read
会将从offset
Read
字节count
提供的字节数组buffer
。
现在我希望在我的应用程序代码中调用Read
之后填充缓冲区。 那可能吗?
如果是的话,我将如何进行连续的Read
调用? 如果可能的话,我希望连续调用每次都返回一个不同的缓冲区。
编辑:
使用Setup
命令,如下所示:
MockedClass.Setup(x => x.Read(It.IsAny(), It.IsAny(), It.IsAny()).Callback( (byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
在执行unit testing时给出了一个奇怪的问题:一旦调用Read
并执行委托代码( buffer[0] = 0xAA
),调试器就会显示buffer
实际上为null
并且执行此命令后unit testing执行停止。 我的语法是borked还是那个bug?
您可以使用Callback方法。 这样的事情(来自记忆):
var buffer = new byte[64]; // ... mock.Setup(m => m.Read(buffer, offset, count)) .Callback((buffer, offset, count) => /* fill in buffer here */);