假设我有一个对象,应该在某些操作上触发一些事件?
我该如何测试?
我可以添加监听器,但监听器的代码将与测试分开。
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
如何将它们放在一个地方?
更新
我能写这样的东西:
assertThat( myObject.runOperation() ).fires( ... )
或类似
Events events = captureEvents( object.runOperation() );
assertThat( events...)
答案 0 :(得分:0)
您的测试看起来没问题,您基本上正在构建一个间谍对象,它将帮助您执行所需的断言。
如果使用专用测试工具真的感觉更好,Mockito.spy也会做这类事情;)
答案 1 :(得分:0)
我认为您可以使用JMockit和Expectations之类的东西来实现这一目标。我不确定会有多短,但我认为阅读和写作会更好。我自己对JMockit做的并不多,所以我不能举一个例子。