kev*_*jom 5 spring spring-test spring-test-mvc spring-boot
我们正在使用 spring boot (v1.3.3.RELEASE) 构建一个项目,我们有一个自定义的 ErrorController ,如下所示
@RestController
@RequestMapping("/error")
public class GlobalErrorController extends AbstractErrorController {
@Autowired
public GlobalErrorController(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
@Override
public String getErrorPath() {
return "/error";
}
@RequestMapping(produces = MediaType.ALL_VALUE)
public ResponseEntity error(HttpServletRequest request) {
HttpStatus status = getStatus(request);
if (status.is5xxServerError()) {
//log maybe
}
return new ResponseEntity(status);
}
}
Run Code Online (Sandbox Code Playgroud)
当我们启动Spring Boot应用程序并尝试通过curl或浏览器访问它时,我们发现它运行良好,它只响应状态代码而没有正文(内容)。
但是当我们尝试为这个控制器编写集成测试时,我们发现ErrorController永远不会被调用,一些示例代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyApplication.class, TestConfiguration.class})
@WebAppConfiguration
public class GlobalErrorControllerIntegrationTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void shouldRespondWithServerErrorButNoContent() throws Exception {
mockMvc.perform(get("/test/err")).andExpect(status().is5xxServerError()).andExpect(content().string(""));
}
}
Run Code Online (Sandbox Code Playgroud)
MyApplication 是用 @SpringBootApplication 注解的应用程序的入口,而 TestConfiguration 是一些测试装置,将用于帮助运行测试,它看起来像这样:
@Configuration
@ComponentScan("com.my.test.fixtures")
public class TestConfiguration {
}
Run Code Online (Sandbox Code Playgroud)
我们还有一个测试控制器,它会引发错误
@RestController
public class TestErrorController {
@RequestMapping("/test/err")
public int raiseError() {
return 1 / 0;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙找出问题所在吗?
是否是由于使用spring时没有嵌入服务器导致的TestContext
,如果是,有没有更好的解决方案?
提前致谢。
归档时间: |
|
查看次数: |
1735 次 |
最近记录: |