假設我有一個對象,應該在某些操作上觸發某個事件?如何以單元測試事件觸發?
我該如何測試它?
我可以添加偵聽器,但偵聽器的代碼將與測試分開。
final ArrayList<MyEvent> eventsFired = new ArrayList<>();
myObject.addMyEventListener(new MyEventListener() {
public void myEventHappened(MyEvent evt) {
eventsFired.add(evt);
}
});
result = myObject.runOperation();
assert(result, ...);
assert(eventsFired.size(), ...); // is by one grater than before operation
assert(eventsFired.get(eventdFired.size()-1_, ...) // is correct
如何讓他們在一個地方?
UPDATE
我可以寫這樣的事:
assertThat(myObject.runOperation()).fires(...)
或類似
Events events = captureEvents(object.runOperation());
assertThat(events...)
你是什麼意思的「從測試中分離出來」和「讓他們在一個地方」? – Vampire
此解決方案建議使用模擬事件:[link](http://stackoverflow.com/questions/20977403/unit-testing-event-listeners) – RobP
@RobP就我所知他不想測試(a )事件監聽器,但是事件監聽器。因此,如果使用標準斷言是他的方式,示例代碼對我來說看起來很好。 – Vampire