概要
MockMvc のテストで Servlet の Filter を使用する方法を紹介します
MockMvc を使ったテスト環境の構築はこちらの記事を参考にして準備してください
また、Spring + Filter の使い方に関してはこちらを御覧ください
環境
- Mac OS X 10.10.3
- Eclipse Luna 4.4.1
- Spring Framework 4.1.6
- Spring Tool Suite 3.6.4
- Java 1.8.0_31
- Maven 3.2.1
Filter オブジェクトの作成
テスト用のクラスファイルに以下を追記します
@Autowired
を使ってクラスの作成と同時に Filter オブジェクトを生成します
@Autowired
private TestFilter testFilter;
フィルタの名前は自身の環境に合わせて適宜変更してください
また必要に合わせてimport
文も定義してください
Beans として登録する
src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
に以下を追記します
@Autowired
で定義したフィルタオブジェクトをBeansの仕組みを使って生成するためです
<!-- for Filter -->
<beans:bean id="testFilter" class="com.sample.TestFilter">
</beans:bean>
MockMvc にフィルタを登録する
作成したフィルタをMockMvcのテスト時に使用するようにフィルタを追加します
MockMvc を WebApplicationContext から生成しているところで以下のようにフィルタを追加してください
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilter(this.testFilter, "/").build();
addFilter
メソッドを呼び出します
第一引数でフィルタを指定して第二引数でフィルタを適用するURLマッピングを指定します
動作確認
mvn package
等でテストを実行してフィルタの動作が実行されているか確認してください
最後に
web.xml
でアプリ的にフィルタを使うように定義していてもMockMvcでテストした際に有効にならないことに気が付き今回の対応を実施しました
web.xml
で定義していればテストでも通るようにしていいと思うんだけど、こうなっているのは MockMvc が Servlet の世界とは別世界のクラスだからなのだろうか
それとも親切心からなのだろうか
0 件のコメント:
コメントを投稿