我正在使用Spring MVC编写一个Rest服务,以下是该类的概述:
@Controller
public class MyController{
@RequestMapping(..)
public void myMethod(...) throws NotAuthorizedException{...}
@ExceptionHandler(NotAuthorizedException.class)
@ResponseStatus(value=HttpStatus.UNAUTHORIZED, reason="blah")
public void handler(...){...}
}
我已经根据此处发布的设计编写了单元测试。测试基本上如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(....)
public class mytest{
MockHttpServletRequest requestMock;
MockHttpServletResponse responseMock;
AnnotationMethodHandlerAdapter handlerAdapter;
@Before
public void setUp() {
requestMock = new MockHttpServletRequest();
requestMock.setContentType(MediaType.APPLICATION_JSON_VALUE);
requestMock.addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
responseMock = new MockHttpServletResponse();
handlerAdapter = new AnnotationMethodHandlerAdapter();
}
@Test
public void testExceptionHandler(){
// setup ....
handlerAdapter.handle(...);
// verify
// I would like to do the following
assertThat(responseMock.getStatus(), is(HttpStatus.UNAUTHORIZED.value()));
}
}
然而,对于
handle
的调用抛出了NotAuthorizedException
。我已经阅读到这是为了能够单元测试该方法是否抛出适当的异常,但是我想编写一个自动化测试来确保框架正确处理此异常并且被测试类已经正确实现了处理程序。有什么方法可以做到这一点吗?请注意,我无法在可以发布代码的地方访问实际代码。
另外,由于不幸的原因,我只能使用Spring 3.0.5或3.1.2。
@ExceptionHandler
的存在,并验证我是否正确配置了框架,这是非常有价值的。 - John BAnnotationMethodHandlerAdapter
处理@RequestMapping
时所做的。我正在寻找对我的@ExceptionHandler
注释进行同样类型的测试,即自动化测试适当的响应代码是否与适当的消息返回。这不是测试框架,而是我的代码。我可以使用反射查找类中的注释并检查它们是否正确,但似乎应该有更好的方法。 - John B