AssertWasNotCalled on Action属性

时间:2014-02-19 17:25:07

标签: c# rhino-mocks

我正在使用RhinoMocks,我想断言属性引用的Action没有被调用,但我不关心属性本身。

示例:

public class MyClass
{
    public Action DoSomething { get; set; }

    public void TryDoSomething()
    {
        if(DoSomething != null)
            DoSomething();
    }
}

[TestMethod]
public void TestDoSomethingNotCalled()
{
    var myclass = new MockRepository.GeneratePartialMock<MyClass>();

    myclass.TryDoSomething();

    myclass.AssertWasNotCalled(m => m.DoSomething());
}

由于对DoSomething进行空检查,此测试失败。有没有办法断言没有调用此属性引用的Action,而不是属性本身?

2 个答案:

答案 0 :(得分:0)

我最终做了以下事情:

[TestMethod]
public void TestDoSomethingCalled()
{
    var myclass = new MyClass();

    bool methodcalled = false;
    myclass.DoSomething = () => { methodcalled = true; };

    myclass.TryDoSomething();

    Assert.IsTrue(methodcalled);
}

[TestMethod]
public void TestDoSomethingNotCalled()
{
    var myclass = new MyClass();

    AssertDoesNotThrow<NullReferenceException>(
        () => { myclass.TryDoSomething(); });
}

答案 1 :(得分:-1)

查看MyClass.TryDoSomething()代码我认为有2个案例需要测试:

  1. DoSomething 为空:然后您只需要在调用NullReferenceException时检查没有TryDoSomething()。无需验证是否调用DoSomething Action,因为无法调用。
  2. DoSomething 不为空:然后,您需要检查调用DoSomething时是否调用TryDoSomething()。你自己的答案显示了如何做到这一点的一个好例子。但是对于cource,您需要将Assert.IsFalse()更改为Assert.IsTrue()