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); 
+0

哈哈,你说得对,我的答案中的两个选项都是完全错误的。 – 2010-11-06 03:58:33