如何使用 MockMvcRequestBuilders 在 Spring Boot 2.0 中向模型添加查询参数

Sou*_*rer 2 mocking spring-test-mvc spring-boot

我正在尝试使用 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();

    }
  }
Run Code Online (Sandbox Code Playgroud)

这样,代码运行良好,但是当我尝试使用参数化查询时,我找不到方法

我已经尝试过(没有成功)

.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)
Run Code Online (Sandbox Code Playgroud)

提前致谢

rie*_*pil 5

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

.get("/recommendation?productId={product}",PRODUCT_OK)
Run Code Online (Sandbox Code Playgroud)

您还可以扩展多个 URI 变量

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