【问题标题】:How can I use Moles to return different values for multiple calls to a method in C#?如何使用 Moles 为 C# 中的方法的多次调用返回不同的值?
【发布时间】:2011-12-17 09:46:56
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: c# moles


    【解决方案1】:

    这有点难看,但可能:

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

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

    【讨论】:

    • 这通常可以完成工作。您可以结合索引和 IEnumerable 以使后续调用按顺序返回连续条目。
    • 谢谢,没有想到这样的解决方案,很高兴它有效(无论如何这只是一个特例):-)
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多