小编Kev*_*age的帖子

集成测试 Spring SseEmitters

我一直在寻找有关如何最好地测试返回 SseEmitters 的 Spring MVC 控制器方法的提示。我的想法很短,但有一个反复试验的解决方案,可以测试异步、线程化的行为。下面是示例代码,只是为了演示概念,可能有一两个错字:

控制器类:

@Autowired
Publisher<MyResponse> responsePublisher;

@RequestMapping("/mypath")
public SseEmitter index() throws IOException {
    SseEmitter emitter = new SseEmitter();
    Observable<MyResponse> responseObservable = RxReactiveStreams.toObservable(responsePublisher);

    responseObservable.subscribe(
            response -> {
                try {
                    emitter.send(response);
               } catch (IOException ex) {
                    emitter.completeWithError(ex);
               }
            },
            error -> {
                emitter.completeWithError(error);
            },
            emitter::complete
    );

    return emitter;
}
Run Code Online (Sandbox Code Playgroud)

测试类:

//A threaded dummy publisher to demonstrate async properties.
//Sends 2 responses with a 250ms pause in between.
protected static class MockPublisher implements Publisher<MyResponse> {
    @Override
    public void subscribe(Subscriber<? …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc server-sent-events reactive-streams

7
推荐指数
1
解决办法
1754
查看次数