如何单元测试void方法?

时间:2017-01-05 21:39:06

标签: java unit-testing

我有这样的方法:

[Int:[Int:[Int:String]]]

然而我改变它来过滤我不想广播的某些事件:

public void processEvent(Event e) {
   save(e); // void method
   broadcast(e); // void method.
}

如何对此更改进行单元测试?

2 个答案:

答案 0 :(得分:2)

UnitTests验证公众可观察行为,而非“代码”。

因此,您应该验证“被测试的类”(剪切)与其依赖关系的交互。这意味着:您检查剪切是否在依赖项上调用预期的方法(或不)。

其中一个依赖项是Event对象。

方法save()broadcast()很可能与其他依赖项(其他类的对象)进行交互。

为所涉及的所有依赖项创建模拟。使用像模拟框架。

也许你必须改进你的类来创建“接缝”,在测试执行时你可以用模拟交换真实对象的地方。最好通过依赖注入来完成。

然后,您可以验证是否按预期切断了与其依赖项的交互。

答案 1 :(得分:1)

如果我理解正确,你的方法应该只广播某些事件。

您可以验证某些方法(广播)的执行次数。

我使用Mockito作为模拟框架,看起来像这样:

Mockito.verify(myEvent, times(1)).proccessEvent();

您必须事先模拟个别事件:

MyEvent myEvent = mock(myEvent.class);

此外,如果您想检查广播是否未执行,我建议:

Mockito.verify(MyEvent, times(0)).proccessEvent();