我有这样的方法:
[Int:[Int:[Int:String]]]
然而我改变它来过滤我不想广播的某些事件:
public void processEvent(Event e) {
save(e); // void method
broadcast(e); // void method.
}
如何对此更改进行单元测试?
答案 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();