Angenommen, ich habe ein Objekt, das bei einer Operation ein Ereignis auslösen sollte?Wie testet man die Ereignisauslösung?
Wie würde ich es testen?
Ich kann Hörer hinzufügen, aber der Code des Hörers wird vom Testen getrennt.
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
Wie bekomme ich sie an einem Ort?
UPDATE
Kann ich so etwas schreiben:
assertThat(myObject.runOperation()).fires(...)
oder so etwas wie
Events events = captureEvents(object.runOperation());
assertThat(events...)
Was meinen Sie mit "getrennt vom Testen" und "um sie an einem Ort zu bekommen"? – Vampire
Diese Lösung schlägt vor, ein Scheinereignis zu verwenden: [link] (http://stackoverflow.com/questions/20977403/unit-testing-event-listeners) – RobP
@RobP, soweit ich verstanden habe, will er das nicht testen (a) Ereignis-Listener, aber der Ereignisproduzent. Daher sieht der Beispielcode für mich gut aus, wenn ich Standard-Assertions verwenden möchte. – Vampire