Moq中SetupSet和SetupProperty之间的区别

时间:2010-11-09 02:53:35

标签: c# unit-testing mocking moq

据我所知,SetupSet是在Moq中设置属性的旧方法。它现在是obsolette但是我的intellisense显示两者都没有标记为Obsolette。谁能指出我们之间的实际区别?

2 个答案:

答案 0 :(得分:17)

我可能发现了以下差异之一。

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

例如,下面不起作用

public interface IXyz
{
  int Id { get; }
}

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

如果您尝试执行上面的代码,它会说出来 System.ArgumentException:Property IXyz.Id是只读的

因此,如果您将代码更改为以下代码,则可以使用

_mock.SetupGet(x => x.Id).Returns(1054);

答案 1 :(得分:13)

SetupSet未标记为过时。你可能会想到ExpectSet,它被标记为已废弃的消息,“ExpectSet已重命名为SetupSet。”

SetupSet可让您指出要设置属性的期望:

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

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