2009-09-06 86 views
0

我正在使用構造函數注入模式插入我的模擬與moq。設置一個Moq對象問題

所以我有這樣的事情在我NUnit測試

property UserMock 
property IService // interface 

public void PreSetup() 
{ 
    UserMock = new UserMock; 
    ITaskService = new Service(UserMock.object); 

} 

現在我有這樣

public void TestSomething() 
{ 
    UserMock.Setup(u => u.SomeMethod(It.IsAny<string>())); 
} 

一個單元測試方法,現在,我想我會永遠過之後,才能做到這一點。

public void TestSomething() 
    { 
     UserMock.Setup(u => u.SomeMethod(It.IsAny<string>())); 
     ITaskService.User = UserMock.Object 
    } 

看來我不必這樣做。就像我的想法是對象被傳遞給構造函數,其中的任何東西都被設置到TaskServiceClass中的「User」屬性中。

所以,如果我來在稍後添加的東西會不會被置除非我重置對象的方法。

這似乎並不如此。那麼我不瞭解什麼?

感謝

回答

1

這都是猜測:但UserMock.Object.SomeMethod可能調用到其父的自定義方法,如UserMock.SomeMethod。至少SomeMethod的定義在UserMock.Object上更改而不創建新對象。

因此,將UserMock.Object傳遞給構造函數可以正常工作,因爲如果我是對的,ITaskService持有對UserMock.Object的引用,該引用持有對UserMock的引用,可以自由更改其對SomeMethod的處理而不會丟失連接您已在PreSetup中建立。

+0

啊之類的有意義完全忘了當你對象的引用被製成,可以有指向它不同的對象有關。 – chobo2 2009-09-06 05:07:23

+0

我從來沒有真正使用過這種方式的嘲笑,所以我沒有花一分鐘時間思考它。通常情況下,我會在每種測試方法中創建一個全新的模擬和服務,但這是出於習慣,並且需要在每個測試的基礎上靈活。 – 2009-09-06 05:10:17