如何使用mole在c#中为多个方法调用返回不同的值?

本文关键字:返回 调用 方法 mole 何使用 | 更新日期: 2023-09-27 18:12:36

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

问题:我有一个方法我想为它写一个单元测试。在这个方法中有一个我无法真正解决的外部依赖,所以我将不得不使用mole来创建我的单元测试。

这个外部依赖由实例上的一个方法组成,该方法被调用多次(两次),第二次我想用mole返回一个不同的值。

...
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作为结果。

任何想法?

如何使用mole在c#中为多个方法调用返回不同的值?

这有点难看,但可能:

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

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