Tim*_*sig 13 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实际上null并且执行此命令后单元测试执行停止.我的语法是borked还是那个bug?
Mar*_*ann 15
您可以使用Callback方法.这样的事情(来自记忆):
var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
.Callback((buffer, offset, count) => /* fill in buffer here */);
Run Code Online (Sandbox Code Playgroud)