我正在使用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,而不是属性本身?
答案 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个案例需要测试:
DoSomething
为空:然后您只需要在调用NullReferenceException
时检查没有TryDoSomething()
。无需验证是否调用DoSomething
Action,因为无法调用。DoSomething
不为空:然后,您需要检查调用DoSomething
时是否调用TryDoSomething()
。你自己的答案显示了如何做到这一点的一个好例子。但是对于cource,您需要将Assert.IsFalse()
更改为Assert.IsTrue()
。