2017-06-13 61 views
2

請參閱下面的代碼,這是我的單元測試的一部分:我如何確保每個循環都創建一個新的Person?

mockPersonFactory.Setup(m => m.Create()).Returns(PersonFactory()); 

public IPerson PersonFactory() 
{ 
    IPerson iPerson = new Person(); 
    return iPerson; 
} 

PersonFactory應該被調用多次(因爲它被包含在代碼循環被測試)。但是,不要每次在循環中創建新的Person,而是每次都重複使用同一人員對象。我如何確保在每個循環中創建一個新的Person?

回答

5

您的代碼只是說「使用返回值PersonFactory()作爲返回值Create()」。相反,您需要指示它致電PersonFactory()以獲得每次返回值。使用的Returns接受拉姆達超載:

mockPersonFactory.Setup(m => m.Create()).Returns(() => PersonFactory()); 

或者簡單:

mockPersonFactory.Setup(m => m.Create()).Returns(PersonFactory); 
+1

'.Returns(PersonFactory)'也將工作,我相信。 –

+1

@ScottChamberlain好點,它會的。 –

+0

謝謝。人物對象由Castle Windsor在正在測試的代碼中創建。在單元測試中做這樣的事是可以接受的,或者我應該使用IOC作爲模擬對象嗎?再次感謝。 +1的答案 - 它的作品。 – w0051977

相關問題