C# 未对操作属性调用AssertWas

C# 未对操作属性调用AssertWas,c#,rhino-mocks,C#,Rhino Mocks,我使用的是Rhinomock,我想声明属性引用的操作没有被调用,但我不关心属性本身 例如: public class MyClass { public Action DoSomething { get; set; } public void TryDoSomething() { if(DoSomething != null) DoSomething(); } } [TestMethod] public void Test

我使用的是Rhinomock,我想声明属性引用的操作没有被调用,但我不关心属性本身

例如:

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上的空检查,此测试失败。是否有一种方法可以断言此属性引用的操作未被调用,而属性本身未被调用?

我最后执行了以下操作:

[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(); });
}
查看MyClass.TryDoSomething代码,我认为有两种情况需要测试:

DoSomething为null:那么在调用TryDoSomething时,您只需要检查不存在null引用异常。无需验证是否调用了DoSomething操作,因为没有可调用的内容。 DoSomething不为null:然后需要检查在调用TryDoSomething时是否调用了DoSomething。你自己的答案是一个很好的例子。但是当然,您需要将Assert.IsFalse更改为Assert.IsTrue。
这个测试失败了。你有没有试过根据问题中的代码运行此测试?更新以反映你的答案我跳了枪,没有阅读你的完整回答。我试图推翻这个问题,但它不允许我这样做。谢谢