如何使用Moles为C#中的方法多次调用返回不同的值?

时间:2011-10-28 15:38:17

标签: c# moles

我一直在努力为此寻找解决方案,但要么我一直在寻找错误的搜索字词,要么我的问题根本就没有答案。

问题: 我有一个方法,我想写一个单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我将不得不使用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”时,这会“覆盖”第一行,所以我总是会因此而得到错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这有点难看,但可能:

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

第一个调用将返回true,第二个调用将返回false。