2011-09-21 77 views
0
class Test : ITest 
{ 
    public string MyValue { get; } 
    public string Detail {get; set;} 
} 

我想嘲笑方法myvalue的這樣如何嘲笑這個概念

Test myTest = new Test() { Detail = "My Test" }; 
MockRepository repositoryTest = new MockRepository(MockBehavior.Default); 
Mock<Test> mockTest = repositoryTest.Create(myTest); 

mockTest.Setup(t => t.MyValue).Returns("Some text"); 
return myTest; 

注:此代碼不起作用,僅用於理解我想要的內容。

其他方式我怎樣才能嘲笑一個現有對象的實例?我使用Google Moq。

+0

問題是什麼?如果你調用'myTest.Object.MyValue',你會得到'Some Text'我認爲(從我的頭頂開始) – thekip

回答

0

你應該嘲笑接口,而不是實現類。

使用Mock<T>.Get(T)從您的T得到Mock<T>

ITest test = new Mock<ITest>().Object; 
Mock<ITest> mockTest = Mock<ITest>.Get(test); 

編輯:可以使用Moq.Stub命名空間存根出性能。看看這個網頁:http://blog.theagileworkshop.com/2009/03/24/stubs-in-moq/

+0

Ok,但是如何使用Mock ().Object類似於Test對象的一個​​實例。防爆。如果我想設置細節值? – Francis

+0

@Francis:你是否在調用屬性setter(即專門說'myTestObject.Detail = someValue'),或者你只是在你正在測試的代碼中調用getter?如果你只是訪問被測代碼中的屬性,只需在單元測試中使用'mockTest.SetupGet(mock => mock.Detail).Returns(someValue)'。 –

+0

我只想嘲笑屬性MyValue屬性Detail必須返回自己的值; – Francis