2010-11-02 93 views
3

例如: 我有一個屬性和方法的接口。 該方法用該屬性的值做某事。 如何設置模擬以訪問財產的價值?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?

回答

7

您使用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