Java SpringMVC:如何使用mockMvc测试Rx响应?

Java SpringMVC:如何使用mockMvc测试Rx响应?,java,spring,spring-mvc,testing,rx-java,Java,Spring,Spring Mvc,Testing,Rx Java,我的控制器是: import rx.Single; ... @GetMapping Single<List<MyType>> fetchFromDB() { return Single .fromCallable(() -> dao.fetch()) .subscribeOn(Schedulers.io()); } 但它在以下方面失败了: java.lang.IllegalState

我的控制器是:

import rx.Single;
...

@GetMapping
Single<List<MyType>> fetchFromDB() {
        return Single
                .fromCallable(() -> dao.fetch())
                .subscribeOn(Schedulers.io());
}
但它在以下方面失败了:

java.lang.IllegalStateException: Async result for handler [rx.Single<java.util.List<MyType>> MyController.fetchFromDB()] was not set during the specified timeToWait=-1

    at org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:145)
    at org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:121)
    at org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch(MockMvcRequestBuilders.java:246)
    at MyControllerSpec.should fetch from db...
java.lang.IllegalStateException:在指定的时间内未设置处理程序[rx.Single MyController.fetchFromDB()]的异步结果ToWait=-1
位于org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:145)
位于org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:121)
位于org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch(MockMvcRequestBuilders.java:246)
在MyControllerSpec.上,应从数据库获取。。。

那么:如何用SpringMVC测试rx.Single?

我找到了答案。当您创建mockMvc对象时,为
Single
添加一个处理程序:

return MockMvcBuilders.standaloneSetup(controller)
                .setCustomReturnValueHandlers(new SingleReturnValueHandler())

如果改用
MockMvcBuilders.webAppContextSetup(context)
,则可以在
webmvcconfigureadapter
中添加处理程序:

public class Config extends WebMvcConfigurerAdapter {

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
        returnValueHandlers.add(new SingleReturnValueHandler());
    }
}
公共类配置扩展WebMVCConfigureAdapter{
@凌驾
public void addReturnValueHandlers(列出returnValueHandlers){
添加(新的SingleReturnValueHandler());
}
}
请检查提供的答案
public class Config extends WebMvcConfigurerAdapter {

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
        returnValueHandlers.add(new SingleReturnValueHandler());
    }
}