如何为 MockMvcRequestBuilders 构建获取查询字符串?
How to build get-query string for MockMvcRequestBuilders?
我正在使用 spring-boot-test
和 MockMvcRequestBuilders
来测试一些 GET
rest 网络服务。
问题:是否可以自动将 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
,但以更通用的方式不必静态键入参数。
我不认为有任何开箱即用的东西可以满足这个特定要求,但您可以使用 BeanWrapperImpl
将其拼凑起来以访问 MyRequest
中的属性并打开每个调用请求构建器上的 param
:
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());
我正在使用 spring-boot-test
和 MockMvcRequestBuilders
来测试一些 GET
rest 网络服务。
问题:是否可以自动将 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
,但以更通用的方式不必静态键入参数。
我不认为有任何开箱即用的东西可以满足这个特定要求,但您可以使用 BeanWrapperImpl
将其拼凑起来以访问 MyRequest
中的属性并打开每个调用请求构建器上的 param
:
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());