【问题标题】:C# Mock method return value evaluate at the actual executionC# Mock 方法返回值在实际执行时评估
【发布时间】:2015-07-03 05:09:43
【问题描述】:

我正在使用NunitRhino-Mocks 进行代码单元测试。
我的代码如下所示;

_mockHandler.Expect(m => m.DoSomething(Arg<string>.Is.Anything, Arg<string>.Is.Anything))
            .Return(myList["XXX"]);

myList 的内容正在从正在运行的线程更新。一旦myList["XXX"] 的上述行执行值为空。但是在这个方法调用的时候,代码myList["XXX"] 是有值的。

有什么方法可以配置,调用方法时参考实际值?

【问题讨论】:

    标签: c# unit-testing mocking nunit rhino-mocks


    【解决方案1】:

    在运行时而不是记录时返回值的方法是使用WhenCalledDo 方法。

    在您的情况下,Do 似乎是正确的解决方案:(如果您想知道何时使用DoWhenCalled,请阅读my answer

    _mockHandler.Expect(m => m.DoSomething(Arg<string>.Is.Anything, 
                                           Arg<string>.Is.Anything))
                .Do(new Func<string,string,string>((s, s1) => myList["XXX"]));
    

    在上面的例子中,(s, s1) =&gt; myList["XXX"]) 会在你调用DoSomething 时执行,myList["XXX"] 中的值会返回。

    【讨论】:

    • 同意Do() 是正确的做法。不过,我认为不需要最后的 Return()
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多