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# 最小起订量中SetupSet和SetupProperty之间的差异_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

C# 最小起订量中SetupSet和SetupProperty之间的差异

C# 最小起订量中SetupSet和SetupProperty之间的差异,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我知道SetupSet是在Moq中设置属性的旧方法。现在它已经过时了,但我的智能感知显示了这两个,没有一个标记为过时。有人能告诉我它们之间的实际区别吗?没有标记为过时。您可能会想到“ExpectSet已重命名为SetupSet”,该消息标记为已过时 SetupSet用于指示将设置属性的期望值: mock.SetupSet(x => x.Prop = "bar").Verifiable(); mock.Object.Prop = "foo"; mock.Verify(); // fail

我知道SetupSet是在Moq中设置属性的旧方法。现在它已经过时了,但我的智能感知显示了这两个,没有一个标记为过时。有人能告诉我它们之间的实际区别吗?

没有标记为过时。您可能会想到“ExpectSet已重命名为SetupSet”,该消息标记为已过时

SetupSet
用于指示将设置属性的期望值:

mock.SetupSet(x => x.Prop = "bar").Verifiable();
mock.Object.Prop = "foo";
mock.Verify();   // fails

SetupProperty
看起来像是在mock上存根属性的一种方法(请参阅文档中与
SetupSet
相同的部分)。

我可能发现了以下其中一个区别

如果试图模拟只读属性,则必须使用SetupGet,因为SetupProperty在这种情况下不起作用。然而,如果要设置期望值,SetupProperty可用于非只读属性

例如,下面的方法不起作用

public interface IXyz
{
  int Id { get; }
}

//Test Side Code    
var _mock = new Mock<IXyz>();
_mock.SetupProperty(x => x.Id, 1054);

是的,我认为SetupProperty同时作用于getter和setter,但是SetupSet用于什么呢?@Nimesh,我添加了一个使用
SetupSet
验证是否调用了属性setter的示例。@adrift,目前没有任何链接工作。谢谢你的解释,链接已经失效了。四百零四条。@Bomboca:对不起,我错过了你之前的评论!建议将此编辑到你答案的末尾-这是其他人所做的我不认为它是100%正确的。根据文档,SetupProperty用于存根,而不是设置期望值。
_mock.SetupGet(x => x.Id).Returns(1054);