当前位置: 首页 > 知识库问答 >
问题:

spring mvc:如何使用mockMvc测试Rx响应?

韩恺
2023-03-14

我的控制器是:

import rx.Single;
...

@GetMapping
Single<List<MyType>> fetchFromDB() {
        return Single
                .fromCallable(() -> dao.fetch())
                .subscribeOn(Schedulers.io());
}

而且效果很好。但我不能测试它。我试过:

 MvcResult asyncResult = mvc.perform(get("/")).andReturn()

 String result = mvc
                    .perform(asyncDispatch(asyncResult))
                    .andReturn().getResponse().getContentAsString()

但它在以下方面失败了:

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...

所以:如何测试rx。带spring mvc的单曲

共有2个答案

芮琛
2023-03-14

如果您使用MockMvcBuilders.webAppContextSetup(上下文)来代替,您可以在您的WebMvcConfigrerAdapter中添加处理程序:

public class Config extends WebMvcConfigurerAdapter {

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
        returnValueHandlers.add(new SingleReturnValueHandler());
    }
}
宋经赋
2023-03-14

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

return MockMvcBuilders.standaloneSetup(controller)
                .setCustomReturnValueHandlers(new SingleReturnValueHandler())
 类似资料:
  • 我试图用以下代码测试Spring MVC控制器的错误响应 但是测试失败,异常是:。 当我卷曲这个URL时,我得到以下信息: 有人能帮我理解我做错了什么吗?

  • 正在使用Spring MVC创建Restful Web服务... 下面是我的pom.xml: WEB-INF/web.xml: web-inf/mvc-dispatcher-servlet.xml: src/main/resources/database_db.xml: @Repository public class UserDAO{ } SRC/Test/Java: 这就像在print()语句

  • 本文向大家介绍详解Spring MVC如何测试Controller(使用springmvc mock测试),包括了详解Spring MVC如何测试Controller(使用springmvc mock测试)的使用技巧和注意事项,需要的朋友参考一下 在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码。 1

  • 我试图使用spring和mockito对rest控制器进行单元测试。这是我的主控制器方法。 这是我的JUnit测试: 在输出响应中,测试失败,因为它得到404错误,但它预期成功代码为200。我相信我已经正确设置了独立配置,我会做错什么。为什么URI没有正确映射到方法?请注意,对于来自应用程序前端的相同URI,它工作正常。以下是我使用Postman工具为chrome测试的正确200响应的完整URI:

  • 问题内容: 我正在使用spring 3.2.0和junit 4 这是我需要测试的控制器方法 spring-servlet config is: This is my test class : 如何使用MockMvc测试此方法? 问题答案: 你可以使用以下注释来使用应用程序调度程序servlet xml。以下示例使用路径/ mysessiontest设置了一些会话属性并期望返回某个视图来命中控制器:

  • 我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。