带有数组参数的模拟方法,该参数将在调用后更改

mocking method with an array argument which will change after call

我在使用引用参数 (byte[]) 进行模拟方法调用时遇到问题,该参数将在调用后发生变化:

private Mock<ISocket> mSocket;    
byte[] buffer = new byte[1000];
mSocket.Expects.One.Method(x => x.Receive(null))
.With(buffer).WillReturn(2);

但是在调用之后,我需要更改缓冲区数据。

buffer[0] = 10;
buffer[1] = 20;

如何在不更改生产代码的情况下模拟此行为?

您可以使用方法 .Will 链接到您的 .WillReturn() 来调用自定义操作。

例如,您可以调用 .Will(UpdateBuffer())

然后 UpdateBuffer 方法可以在缓冲区中设置您想要的值。 UpdateBuffer 是 class 上实现 IAction 接口的方法。

看看this nmock page的动作部分,那里都有解释,我就不用重复了。