我使用的是一种扩展方法延迟它的Util-Method。* - 调用直到安装(使用It。* - 存储在变量中的调用的结果似乎不起作用)。
但是,我注意到当我使用Func<string> message
调用message()
时,安装程序将无法正常运行。使用message.Invoke()
时,它的效果与我预期的一样。
据我了解,message()
should be syntactic sugar for message.Invoke()
,但为什么他们的行为有所不同?
我确实认为这与Moq-Framework有关,这就是为什么我标记了这个moq。像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");
}