C# 如何修改Moq中传入参数的值
我正在使用moq编写一个方法的单元测试,该方法的参数通过ref传递。调用该方法后,我需要修改该参数的值。我正在尝试为Moq设置使用回调,但它没有更新值C# 如何修改Moq中传入参数的值,c#,unit-testing,callback,nunit,moq,C#,Unit Testing,Callback,Nunit,Moq,我正在使用moq编写一个方法的单元测试,该方法的参数通过ref传递。调用该方法后,我需要修改该参数的值。我正在尝试为Moq设置使用回调,但它没有更新值 myMock = new Mock<IMyObject>(); Foo foo = null; myMock.Setup(x => x.GetResult(It.IsAny<string>(), ref foo)) .Returns("SUCCESS") .Callback((
myMock = new Mock<IMyObject>();
Foo foo = null;
myMock.Setup(x => x.GetResult(It.IsAny<string>(), ref foo))
.Returns("SUCCESS")
.Callback(() => { foo = new Foo ();});
myMock=newmock();
Foo-Foo=null;
myMock.Setup(x=>x.GetResult(It.IsAny(),ref foo))
.回报(“成功”)
.Callback(()=>{foo=newfoo();});
我在这里看到了类似的问题,但它们的答案是使用callback,但我得到的foo值始终为null。在过去12个小时里,我一直在努力解决类似的问题,实现结果的唯一方法是手动继承和模拟对象 在您的例子中,您可以设置一个继承IMyObject的伪对象,并定义它的.GetResult行为来初始化一个新的Foo对象,然后返回“SUCCESS”
然后可以使用NUnit api进行断言。您是否调用过
GetResult
?调用Setup
不会执行回调,只会实际调用正在设置的方法(即GetResult
)即可。是的,我正在调用GetResult
,而仍然foo
保持为空这可能是不可能的。将不会执行回调,因为未调用带有ref参数“foo”的GetResult。您调用了GetResult,但并不是使用完全相同的ref参数实例。请在这里查看更多详情。