Moq - 访问模拟对象的属性
问题描述:
例如: 我有一个属性和方法的接口。 该方法用该属性的值做某事。 如何设置模拟以访问财产的价值?Moq - 访问模拟对象的属性
interface myInterface
{
Id{get;set;}
string ReturnIdAsString();
}
Mock<myInterface> mock = new Mock<myInterface>();
mock.Setup(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString).Returns(**would like to return m.Id here**);
mock.Object.ReturnsIdAsString(); //should return the value in m.Id
如何设置ReturnsIdAsString来访问属性ID?
答
您使用SetupGet
作为属性。既然你在模拟一个接口,那么就没有任何底层的实现,你也必须设置这个方法。
Mock<myInterface> mock = new Mock<myInterface>(){CallBase = true};
mock.SetupGet(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString()).Returns("1");
你可以或者使该方法使用在其返回拉姆达如果你打算改变Id
属性的返回值。
mock.Setup(m => m.ReturnsIdAsString()).Returns(() => mock.Object.Id.ToString());
请记住,即使你的类调用m.Id = 42
它不会改变的财产Get
,虽然你可以验证Set
。
mock.VerifySet(m => m.Id = 42);
哈哈,你说得对,我的答案中的两个选项都是完全错误的。 – 2010-11-06 03:58:33