java – Spring Boot HTTPServletRequest通过测试无法正常使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring Boot HTTPServletRequest通过测试无法正常使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3726字,纯文字阅读大概需要6分钟。
内容图文
![java – Spring Boot HTTPServletRequest通过测试无法正常使用](/upload/InfoBanner/zyjiaocheng/780/9e1ffa670be14a9093269ffced454577.jpg)
我试图在这里搜索答案,但找不到它.所以这就是:我使用的是Spring Boot.我正在使用动态解析查询字符串
@RestController()
@RequestMapping("/processors")
public class ProcessorsController {
protected static transient Logger log = LoggerFactory.getLogger(ProcessorsController.class);
private Gson gson = new Gson();
@Autowired
HttpServletRequest request;
private Options options = new Options();
@Autowired
ProcessorRepository processorRepository;
//Inside a method, I am populating the Options<String, String> map using
//request.getParameterMap()
@CrossOrigin
@RequestMapping(value = "/{name}/run", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
String run(@RequestBody String input, @PathVariable("name") String name) {
Validate.notEmpty(input, "The request body must contain an not empty text");
return runProcessor(input, name);
}
private String runProcessor(String input, String name) {
Validate.notEmpty(name, "The processor name cannot be empty");
Processor processor = processorRepository.getProcessorCalled(name);
addOptions();
return processor.run(input, options);
}
private void addOptions() {
request.getParameterMap().forEach((k, v) -> {
if (!k.equals("text")) {
if (v[0] != null && !v[0].isEmpty()) {
options.put(k, v[0]);
}
}
});
}
}
这在手动测试中工作正常,但我正在尝试编写单元测试.以下是示例:
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {HAL.class, ProcessorsController.class})
@WebAppConfiguration
public abstract class ProcessorsControllerAbstractTest {
MockMvc mvc;
@Autowired
ProcessorRepository processorRepository;
@Autowired
HttpServletRequest request;
@Autowired
ProcessorsController processorsController;
@Before
public void setUp() throws Exception {
processorsController.processorRepository = processorRepository;
processorsController.request = request;
mvc = MockMvcBuilders.standaloneSetup(processorsController).build();
}
}
和
在实际测试类中
public class ProcessorsControllerTest extends ProcessorsControllerAbstractTest {
//other test cases
@Test
public void testAddOptions() throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/processors/default/run").param("size", "500").content(input).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
Assert.assertEquals("500", options.get("size"));
}
}
我无法在request.getParameterMap()中获取请求对象值(例如像para这样的参数).有什么方法可以访问它吗?如果没有,那么测试它的另一种方法是什么?
提前致谢!
解决方法:
你不应该自动连接HttpServletRequest,这是一个非常糟糕的主意.
而是添加@RequestParam Map< String,String> params到您的方法签名,这将自动包含所有参数.如参考指南中的here所述.
@CrossOrigin
@RequestMapping(value = "/{name}/run", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
String run(@RequestBody String input, @PathVariable("name") String name, @RequestParam Map<String, String> params) {
Validate.notEmpty(input, "The request body must contain an not empty text");
return runProcessor(input, name, params);
}
现在,通过将Options存储为实例变量,您的控制器也存在缺陷.控制器是一个单例,现在想象当10个请求all同时开始修改这个实例时会发生什么.为此更改runProcessor和addOptions方法.
private String runProcessor(String input, String name, Map<String, String> params) {
Validate.notEmpty(name, "The processor name cannot be empty");
Processor processor = processorRepository.getProcessorCalled(name);
Options options = new Options();
addOptions(options, params);
return processor.run(input, options);
}
private void addOptions(Options options, Map<String, String> params) {
params.forEach((k, v) -> {
if (!k.equals("text")) {
if (v != null && !v.isEmpty()) {
options.put(k, v);
}
}
});
}
您可能希望将addOptions添加到Options类中(或者将其添加到构造函数中,以便您可以使用Map< String,String>构造一个Options实例.
内容总结
以上是互联网集市为您收集整理的java – Spring Boot HTTPServletRequest通过测试无法正常使用全部内容,希望文章能够帮你解决java – Spring Boot HTTPServletRequest通过测试无法正常使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。