2010-04-25 34 views
3

我正在使用Rhino.Mocks來測試系統。犀牛嘲笑和無序調用的有序測試

我將檢查調用.LoadConfig和.Backup方法的順序。我需要.LoadConfig成爲第一個。

目前的代碼是這樣的:

var module1 = mocks.Stub<IBackupModule>(); 
var module2 = mocks.Stub<IBackupModule>(); 

module1.Expect(x => x.Name).Return("test"); 
module2.Expect(x => x.Name).Return("test2"); 

using (mocks.Ordered()) 
{ 
    module1.Expect(x => x.LoadConfig(null)); 
    module2.Expect(x => x.LoadConfig(null)); 

    module1.Expect(x => x.Backup()); 
    module2.Expect(x => x.Backup()); 
} 
mocks.ReplayAll(); 

的問題是,這也有一個呼叫.NAME財產,我不感興趣時​​,它會被稱爲:.LoadConfig之前或之後.Backup - 它只是沒關係。

當我運行此我得到異常:Unordered method call! The expected call is: 'Ordered: { IConfigLoader.LoadConfig(null); }' but was: 'IIdentification.get_Name();'

有沒有辦法來處理這個?

感謝

回答

1

根據這個老CodeProject article,你可以在 「鳥巢」 您的訂單()和無序()調用。也許這會讓你找到你想要的。

「Name」屬性被多次調用,您不想將其設置爲您的有序測試的一部分?

+0

.Name不會被調用很多次,但是當它被調用時會被改變。它可以在所有.LoadConfigs之前或之前調用.LoadConfig ..但事實上,首先應該運行所有的LoadConfigs,並且只有所有的.Backups不會改變,所以我想測試它。 感謝您的鏈接,它沒有解決問題,但至少我會把所有.Backups和所有.LoadConfigs放入另一個無序塊:) – Shaddix 2010-04-29 04:35:05

+0

好吧,如果您不關心對Name屬性的調用,請嘗試使用.Stub而不是.Expect。然後你的代碼應該可以工作(不需要嵌套)。 – PatrickSteele 2010-04-29 12:28:46