【问题标题】:How to build get-query string for MockMvcRequestBuilders?如何为 MockMvcRequestBuilders 构建获取查询字符串?
【发布时间】:2018-12-26 14:22:21
【问题描述】:

我正在使用spring-boot-testMockMvcRequestBuilders 来测试一些GET 休息网络服务。

问题:是否可以自动将 bean 转换为 get-query

例子:

@AutoConfigureMockMvc
public class WebTest {
    @Autowired
    protected MockMvc mvc;

    @Test
    public void test() {
        MyRequest req = new MyRequest();
        req.setFirstname("john");
        req.setLastname("doe");
        req.setAge(30);

        mvc.perform(MockMvcRequestBuilders
                .get(path)
                .contentType(MediaType.APPLICATION_JSON)
                .param(...) //TODO how to automatically add all params?
                .andExpect(status().isOk());
    }
}

public class MyRequest {
    private String firstname;
    private String lastname;
    private int age;
}

我需要自动翻译为:?firstname=john&lastname=doe&age=30,但以更通用的方式不必静态输入参数。

【问题讨论】:

    标签: java spring spring-boot junit spring-test


    【解决方案1】:

    我认为没有任何开箱即用的东西可以满足这个特定要求,但您可以使用 BeanWrapperImpl 将其拼凑起来,以从 MyRequest 访问属性并将每个属性转换为对 @ 的调用请求生成器上的 987654323@:

    MyRequest req = new MyRequest();
    req.setFirstname("john");
    req.setLastname("doe");
    req.setAge(30);
    
    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
            .get(path).contentType(MediaType.APPLICATION_JSON);
    
    for (PropertyDescriptor property : new BeanWrapperImpl(req).getPropertyDescriptors()) {
        if (property.getWriteMethod() != null) {
            requestBuilder.param(property.getName(),     
                    property.getReadMethod().invoke(req).toString());
        }
    }
    
    mvc.perform(requestBuilder).andExpect(status().isOk());
    

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 2013-06-10
      • 2013-05-30
      • 2010-10-24
      • 2016-05-10
      • 2010-09-23
      相关资源
      最近更新 更多