Я пишу службу Rest с использованием Spring MVC. Вот контур класса:
@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
. Я прочитал, что по дизайну, чтобы иметь возможность unit test, чтобы метод выбрал соответствующее исключение, однако я хотел бы написать автоматизированный тест, чтобы структура обрабатывала это исключение соответствующим образом и что тестируемый класс реализовал обработчик соответственно. Есть ли способ сделать это?
Помните, что у меня нет доступа к фактическому коду в месте, где я мог бы его опубликовать.
Кроме того, я ограничен (по несчастью) до Spring 3.0.5 или 3.1.2.