Moq:操纵传递的参数不起作用



我有这样的东西:

MyMock
.Setup(m => m.MyMethodAsync(It.IsAny<Stream>()))
.Returns((Stream outStream) =>
{
outStream = new MemoryStream(Encoding.UTF8.GetBytes("this is the content"));
return Task.CompletedTask;
});

可以被编译和执行。我可以看到调试器正在运行代码。但是此方法的调用者无法获得流的值。我错过了什么?

Edit1:

Change Returns to Callback具有相同的行为

.Callback((MT365ReceiveResult result, Stream outStream) =>
{
outStream = new MemoryStream(Encoding.UTF8.GetBytes("this is the content"));
});

示例代码没有使用方法调用方提供的Stream,而是为参数分配了一个新的MemoryStream。由于参数没有标记为refout,因此该重赋值只在方法内部有效,而在方法外部无效。

我想,你想写一个值到Stream是由调用者提供的。可以使用以下代码:

MyMock
.Setup(m => m.MyMethodAsync(It.IsAny<Stream>()))
.Returns((Stream outStream) =>
{
var bytes = Encoding.UTF8.GetBytes("this is the content");
outStream.Write(bytes, 0, bytes.Length);
return Task.CompletedTask;
});

最新更新