使用Moq来模拟Func <t>,当多次调用时,它的行为会有所不同

时间:2016-03-16 13:33:07

标签: c# unit-testing moq

如何模拟C#Func,以便在多次调用时返回不同的值或异常?

Mock<Func<bool>> mock = new Mock<Func<bool>>();
mock.SetupSequence(m => m.Invoke())
    .Throws<Exception>()
    .Returns(true);

运行时,会引发以下异常:

System.InvalidCastException : Unable to cast object of type
System.Linq.Expressions.InstanceMethodCallExpressionN' to type
'System.Linq.Expressions.InvocationExpression'.

我见过关于使用SetupSet的其他SO answer,但是,我需要一个序列。

1 个答案:

答案 0 :(得分:2)

根据@henrikmerlander的另一个答案提示,解决方案是不使用.Invoke方法。

Mock<Func<bool>> mock = new Mock<Func<bool>>();
    mock.SetupSequence(m => m())
        .Throws<Exception>()
        .Returns(true);