[英]How to unit test void methods?
我有这样的方法:
public void processEvent(Event e) {
save(e); // void method
broadcast(e); // void method.
}
但是我更改了它以过滤某些我不想广播的事件:
public void processEvent(Event e) {
save(e);
if (e != "foo") {
broadcast(e);
}
}
如何对该变化进行单元测试?
UnitTests验证公共可观察到的行为 ,而不是“代码”。
因此,您应该验证“测试中的类”(剪切)及其依赖项之间的交互。 这意味着:您检查您的剪切是否在依赖项上调用了预期的方法。
Event
对象是此依赖项之一。
方法save()
和broadcast()
最有可能与其他依赖项(其他类的对象broadcast()
交互。
为涉及的所有依赖关系创建模拟。 使用诸如Mockito,JMock之类的模拟框架 。
也许您必须改进类以创建“接缝”,在这里可以在测试执行时与模拟交换真实对象。 最好通过依赖注入来完成。
然后,您可以验证剪切是否按预期与其依赖项进行交互。
如果我正确理解,您的方法应该只广播某些事件。
您可以验证某些方法(广播)已执行了多少次。
我已经将Mockito用作模拟框架,并且它看起来像这样:
Mockito.verify(myEvent, times(1)).proccessEvent();
您必须预先模拟各个事件:
MyEvent myEvent = mock(myEvent.class);
另外,如果您要检查广播是否未执行,我建议:
Mockito.verify(MyEvent, times(0)).proccessEvent();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.