2011-10-28 44 views
4

我一直在試圖找到一個解決方案,但無論我一直在尋找與錯誤的搜索條件,或者根本沒有一個答案,我的問題呢。如何使用Moles爲C#中的方法多次調用返回不同的值?

問題: 我有一個方法,我想寫一個單元測試。在這種方法中,存在一個我無法真正解決的外部依賴,所以我將不得不使用Moles來創建我的單元測試。

這個外部依賴包含一個被稱爲多次(兩次)的實例的方法,第二次我想用Moles返回一個不同的值。

... 
bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true 
if(myVar) 
... 
... 
bool myOtherVar = SomeInstance.SomeMethod(); // Here I'd like to return false 
... 

現在通常我把它像

MSomeInstance.SomeMethod.AllInstances.SomeMethod = @this => true; 

但我怎麼能有兩個調用不同的行爲?當我在返回「false」之後再寫上一行時,這會「覆蓋」第一行,所以我總是會得到錯誤結果。

任何想法?

回答

2

這是一個有點難看,但可能:

var toggle = false; 
MSomeInstance.SomeMethod.AllInstances.SomeMethod = 
    @this => { toggle = !toggle; return toggle; }; 

第一個電話將返回true,第二個假。

+0

這通常會完成工作。您可以組合一個索引和一個IEnumerable以使後續調用按順序返回連續的條目。 –

+0

謝謝,沒有想到這樣的解決方案,很高興它的作品(反正它只是一個特殊情況):-) – Gorgsenegger

相關問題