私は新しいスレッドでリスナーにイベントを渡す持つEventEmitterを作成し、以前に完了した場合に完了していないようです受信された:子スレッドは親が
@Component
public class StudentRegisteredEventListener implements EventListener {
@Override
public void beNotifiedOfEvent(Event e) {
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
StudentRegisteredEvent studentRegisteredEvent = (StudentRegisteredEvent) e;
System.out.println("Received student registered event! Student's name is: "+studentRegisteredEvent.getRegisteredStudent());
}
}
私は次のJUnitテストを持っている:
@Test
public void test_emitter_notifies_listener() {
//given
EventEmitter emitter = new CachedThreadPoolEventEmitter();
//StudentRegisteredEvent event = new StudentRegisteredEvent();
EventListener listener = Mockito.mock(StudentRegisteredEventListener.class);
Student registeredStudent = new Student();
registeredStudent.setName("studentName");
//when
emitter.subscribe(listener,StudentRegisteredEvent.class);
emitter.publish(new StudentRegisteredEvent(registeredStudent));
//then
System.out.println("end of test");
}
私のPR oblemは、親スレッドが "beNotifiedOfEvent"呼び出しの終わりより前に終了すると、リスナーメソッドからの行は出力されないので、コンソール上では "end of test"しか表示されません。
私が興味を持っているのは、この動作の理由と、これがテストのコンテキスト外で動作するかどうかです。 Spring MVCコントローラからイベントを公開する予定です。これは、親スレッドが実行された後に完了することが保証されていますか?