繁体   English   中英

如何对无效方法进行单元测试?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM