如何使用Moq调用方法时验证上下文条件

时间:2015-08-10 11:35:20

标签: c# unit-testing moq conditional-statements

我使用Moq并且我需要在调用模拟方法时检查条件。在下面的示例中,我尝试读取Property1属性,但这可以是任何表达式:

var fooMock = new Mock<IFoo>();
fooMock.Setup(f => f.Method1())
       .Returns(null)
       .Check(f => f.Property1 == true) // Invented method
       .Verifiable();

我的最终目标是在调用方法时检查条件是否为真。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您可以使用Callback(),例如:

// callbacks can be specified before and after invocation
mock.Setup(foo => foo.Execute("ping"))
    .Callback(() => Console.WriteLine("Before returns"))
    .Returns(true)
    .Callback(() => Console.WriteLine("After returns"));

在你的情况下:

bool isProperty1True = false;
var fooMock = new Mock<IFoo>();
fooMock.Setup(f => f.Method1())
       .Callback(() => isProperty1True = fooMock.Object.Property1 == true) 
       .Returns(null)
       .Verifiable();

Assert.IsTrue(isProperty1True);