【问题标题】:How to add query parameters to mockup in Spring Boot 2.0 with MockMvcRequestBuilders如何使用 MockMvcRequestBuilders 在 Spring Boot 2.0 中向模型添加查询参数
【发布时间】:2021-03-12 07:23:41
【问题描述】:

我正在尝试使用 MockMvc 做一个简单的测试类。但我陷入了一件非常简单的事情(但文档没有帮助)。

我的基本代码是

  @SpringBootTest
  @AutoConfigureMockMvc
  class RecommendationServiceApplicationTests {
    private static final Logger LOG = LoggerFactory.getLogger(RecommendationServiceApplicationTests.class);
    
    private final String url = "/recommendation?productId=%d";
    static final int PRODUCT_OK = 1;
    static final int PRODUCT_KO = 0;
    static final int PRODUCT_NOT_FOUND = 113;

    @Autowired
    private MockMvc mockMvc;

    // Check OK response
    @Test
    public void getRecommendationsOK() throws Exception {
        MockHttpServletRequestBuilder requestBuilder;
        MvcResult result;
        String contentResponse;
        Recommendation[] recommendations;

        requestBuilder=
        MockMvcRequestBuilders
            .get("/recommendation?productId=1")
            .accept(MediaType.APPLICATION_JSON);

        result = this.mockMvc
            .perform(requestBuilder)
            .andDo(MockMvcResultHandlers.print())
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn();

    }
  }

这样,代码运行正常,但是当我尝试使用参数化查询时,却找不到路

我试过了(没有成功)

.get("/recommendation?productId=",PRODUCT_OK)
.get("/recommendation?productId={}",PRODUCT_OK)
.get("/recommendation?productId=%d",PRODUCT_OK)
.get("/recommendation?productId=[]",PRODUCT_OK)
.get("/recommendation?productId=PRODUCT_OK",PRODUCT_OK)

提前致谢

【问题讨论】:

    标签: spring-boot mocking spring-test-mvc


    【解决方案1】:

    除了.param(),你还可以使用你已经尝试过的.get(String urlTemplate, Object... uriVars)。您已经非常接近解决方案了:

    .get("/recommendation?productId={product}",PRODUCT_OK)
    

    还可以展开多个 URI 变量

    .get("/recommendation?productId={product}&sort={var}",PRODUCT_OK, "desc");
    

    【讨论】:

    • 我确信我也尝试过这个......但似乎没有。谢谢!
    【解决方案2】:

    使用 .param()

    MockMvcRequestBuilders
                .get("/recommendation")
                .param("product", "1")
                .accept(MediaType.APPLICATION_JSON);
    

    【讨论】:

    • 我是这样做的,但是,您知道如何使用“get”来执行此操作吗?还是不可能?
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多