C# 未对操作属性调用AssertWas
我使用的是Rhinomock,我想声明属性引用的操作没有被调用,但我不关心属性本身 例如: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
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。
这个测试失败了。你有没有试过根据问题中的代码运行此测试?更新以反映你的答案我跳了枪,没有阅读你的完整回答。我试图推翻这个问题,但它不允许我这样做。谢谢