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

问题:
我有一个方法,我想为其编写单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我必须使用 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”时,这会“覆盖”第一行,所以我总是会得到 false 作为结果。

有任何想法吗?

最佳答案

这有点难看,但可能:

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

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

10-07 19:37
查看更多