2010-04-25 66 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