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

如何使用Moles为C#中的一个方法的多个调用返回不同的值?,c#,moles,C#,Moles,我一直在试图找到一个解决方案,但要么我用了错误的搜索词,要么我的问题根本没有答案 问题: 我有一个方法,我想为它编写一个单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我必须使用Moles来创建我的单元测试 这个外部依赖包括一个实例上的方法,该实例被多次调用(两次),第二次我想用Moles返回一个不同的值 ... bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true if( myVar ) ...

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

问题: 我有一个方法,我想为它编写一个单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我必须使用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。

这通常可以完成任务。您可以将索引和IEnumerable组合在一起,以使后续调用按顺序返回连续的条目。谢谢,没有想到这样的解决方案,很高兴它能工作(无论如何,这只是一个特例):-)