如何找出方法是否在Rhino模拟中以bool值调用?

时间:2013-06-21 11:49:10

标签: c# nunit rhino-mocks

我正在尝试使用NUnit和Rhino Mocks编写参数化单元测试,可以返回true或false,具体取决于是否调用了某个模拟方法。 AssertWasCalled不正确,因为它会立即使测试失败。我只想要一个bool值。

[Test]
[TestCase(1,2, Result=false)]
[TestCase(1,1, Result=true)]
public bool SomeTest(int a, int b)
{
    ...
    someObject.CheckValues(a, b); // logs something if values are different.

    return mockLogger.WasCalled(x => x.Log(null));
}

WasCalled ofc不存在。

2 个答案:

答案 0 :(得分:1)

将mock方法上的Log方法存根,以便在调用时设置bool,并返回:

bool logMethodWasCalled = false;
mockLogger
    .Stub(x => x.Log(Arg<string>.Is.Equal(null))
    .Do(new Action<string>(_ => logMethodWasCalled = true));

// Run test...

return logMethodWasCalled;

答案 1 :(得分:0)

最好使用期望:

mockLogger.Expect(x => x.Log(Arg<string>.Is.Anything));

mockLogger.VerifyAllExpectations();

如果要检查参数是否为null,请使用:

mockLogger.Expect(x => x.Log(Arg<string>.Is.Null));

另一种方法是使用:

triggerManagerMock.AssertWasCalled(x => x.Log(Arg<string>.Is.Anything));

在这种情况下,您可以使用Stub方法对行为进行建模,使用AssertWasCalled来检查调用。