Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修改Moq中传入参数的值_C#_Unit Testing_Callback_Nunit_Moq - Fatal编程技术网

C# 如何修改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((

我正在使用moq编写一个方法的单元测试,该方法的参数通过ref传递。调用该方法后,我需要修改该参数的值。我正在尝试为Moq设置使用回调,但它没有更新值

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参数实例。请在这里查看更多详情。