@RunWithと@ContextConfigurationでspring用のjunitを作成する

spring

junitといえば、TestCaseを継承してテストクラスを作ることが一般的なjunitだったと思います。しかしTestCaseクラスを継承したテストクラスでは、「@Autowired」が使えないなど、springの機能を扱う上で障壁がでてきます。

[スポンサーリンク]

springではspring用のjunitが用意されていて、spring用のjunitでは「@Autowired」はもちろん使えますし、その他spring固有のアノテーションを扱ったクラスのテストも楽に出来ます。

この章でやること

spring用のjunitを作成します。

作成するテストクラスと設定ファイル

作成するクラスは「ExampleServoceTest.java」です。
作成する設定ファイルは「servlet-context-test.xml」です。
実クラスの実装箇所は省略していますが、実際にはテスト対象となる実クラスも必要です。

spring-junit1

springMVCのひな型の作成方法は、「springsource tool suite Webアプリを自動生成してみよう編」を参照して下さい。

テストクラスの作成

4行目で実行するjunit(TestCaseの代わり)を指定しています。
5行目でテスト用のspring設定ファイルを読み込んでいます。classpath指定することによって、「test/resources」直下を参照しています。

/**
 * サンプルサービスクラスのjunitです。
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:servlet-context-test.xml")
public class ExampleServoceTest {

	@Autowired
	private ExampleServoce service;

	@Test
	public void testService() {
		String ret = service.find("");
		assertEquals("test dao!!", ret);
	}
}

テスト用設定ファイル

「servlet-context-test.xml」の内容です。テスト対象クラスが動作する最低限の設定を記述します。

<beans:beans xmlns="省略">

    <context:annotation-config />
    <context:component-scan base-package="com.example.*" />

</beans:beans>

解説

@RunWithにSpringJUnit4ClassRunnerを指定することによって、@Autowiredが使えるようになります。
従来通りのTestCaseを継承したテストクラスだと、@Autowiredは使用できません。

実行結果

「ExampleServoceTest」を右クリック>「Debug as」>「Junit Test」をクリックして、junitを実行します。

spring-junit2

springMVCのバージョン

org.springframework-versionは、3.1.0を使っています。
javaは、1.6.0を使っています。

最後に

通常のjunit(TestCaseを継承するケース)と比べても、@RunWithと@ContextConfigurationを使用するだけで、その他は特に特殊なことはしていません。
通常のjunit(TestCaseを継承するケース)でspringの単体テストを行うことは不可能ではありませんが、非常に難しいものとなります。(現場レベルのロジックでは限りなく不可能に近いと思います。)
springのjunitクラスを作る際には、@RunWithと@ContextConfigurationを使う方法でjunitを作成しましょう。