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 に制限されています。