在It.IsAny<> -MethodGroup上使用myLambda()而不是myLambda.Invoke()时,Moq-Setup失败

时间:2017-10-27 11:03:07

标签: c# moq

我使用的是一种扩展方法延迟它的Util-Method。* - 调用直到安装(使用It。* - 存储在变量中的调用的结果似乎不起作用)。

但是,我注意到当我使用Func<string> message调用message()时,安装程​​序将无法正常运行。使用message.Invoke()时,它的效果与我预期的一样。

据我了解,message() should be syntactic sugar for message.Invoke(),但为什么他们的行为有所不同?

我确实认为这与Moq-Framework有关,这就是为什么我标记了这个。像Func<string> f = ()=>"test"; f();之类的东西会返回一个字符串。 Moq用它做了很多魔术。*,Mock&lt;&gt;等等,也许我会以某种方式干扰它。

以下示例:

public interface ILog 
{
    void Debug(string message, Exception exception = null);
}

public class LogUtils
{
    public static void Debug(this Mock<ILog> mock, string message, Exception exception = null)
    {
        mock.Debug(() => message, () => exception);
    }

    public static void Debug(this Mock<ILog> mock, Func<string> message, Func<Exception> exception)
    {
        // NOT working line
        mock.Setup(logger => logger.Debug(message(), exception()));

        // Working line
        mock.Setup(logger => logger.Debug(message.Invoke(), exception.Invoke()));
    }
}


// Test Method
public void TestMethod()
{
    Mock<ILog> logger = new Mock<ILog>(MockBehavior.Strict);

    // Setup logger to accept any input by using It.IsAny<>-MethodGroup
    logger.Debug(It.IsAny<string>, It.IsAny<Exception>);

    // Fails with no corresponding setup
    logger.Object.Debug("Test");
}

0 个答案:

没有答案