我一直试图为此找到解决方案,但要么我一直在寻找错误的搜索词,要么根本没有我的问题的答案。
问题:
我有一个方法,我想为其编写单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我必须使用 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。