2011年11月10日

SpringJUnit4ClassRunner

どうも、塩内藤です。

Spring配下にあるBeanのテスト

JUnit使ってユニットテストする際にApplicationContextをアノテーションで設定できるということを最近知った。。。
どういう事かというとSpringが単体テスト用の部品も持っていて
SpringJUnit4ClassRunnerっていうのを使うと自分でApplicationContextを作成するコードを記述しなくてよくなる。

たとえば下みたいなクラスがあるとして


package test.validator;

import org.springframework.stereotype.Component;

@Component
public class FooValidator {
public boolean validate() {
return true;
}
}


今までは下みたいな感じで書いてた

package test;

import junit.framework.TestCase;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import test.validator.FooValidator;

public class FooValidatorTest extends TestCase {

private FooValidator validator = null;

@Override
protected void setUp() throws Exception {
// ClassPathXmlApplicationContextを使用してコンテキストファイルを読み込む
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:test/test-context.xml");

// コンテキストからテスト対象のBeanを取得する
validator = context.getBean(FooValidator.class);
}

@Test
public void testCase1() {
assertTrue(validator.validate());
}

}


しかし、知ったあとは、、
アノテーション指定でコンテキスト設定してるので
AutowiredでApplicationContextのDIも可能
当然ながらFooValidatorへのAutowiredはApplicationContextの自動設定部分を削除しても動作します。

package test;

import junit.framework.TestCase;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import test.validator.FooValidator;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "test-context.xml"})
public class FooValidatorTest extends TestCase {

@Autowired
private ApplicationContext context = null;

@Autowired
private FooValidator validator = null;

@Test
public void testCase1() {
assertTrue(validator.validate());
}

}



○注意点
・JUnit4より前のバージョンではRunWithアノテーションを持っていないため、JUnit4.xのみで使用可能
・Spring2.5.xでは、SpringJUnit4ClassRunnerはJUnit4.4以前のバージョンにしか対応していないため、JUnit4.4を使用した方がいい


ちなみに今回はSpring3.0のJUnit4.10で実行しました。
posted by しお at 14:20| Comment(0) | TrackBack(0) | spring
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/50155918

この記事へのトラックバック