JUnit Spring統合の例
このチュートリアルでは、JUnitフレームワークでSpring DIコンポーネントをテストする方法を説明します。
使用される技術:
-
JUnit 4.12
-
Hamcrest 1.3
-
Spring 4.3.0.RELEASE
-
Maven
プロジェクトの依存関係
SpringとJUnitを統合するには、 `spring-test.jar`が必要です。
pom.xml
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.0.RELEASE</version> <scope>test</scope> </dependency>
2.スプリングコンポーネント
後でテストするための簡単なSpringコンポーネント。
2.1インターフェース。
DataModelService.java
package com.mkyong.examples.spring; public interface DataModelService { boolean isValid(String input); }
2.2上記のインタフェースの実装。
MachineLearningService.java
package com.mkyong.examples.spring; import org.springframework.stereotype.Service; @Service("ml") public class MachineLearningService implements DataModelService { @Override public boolean isValid(String input) { return true; } }
2.2スプリング構成ファイル、コンポーネントスキャン。
AppConfig.java
package com.mkyong.examples.spring; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = {"com.mkyong.examples.spring"}) public class AppConfig { }
3. JUnit Spring統合の例
`@RunWith(SpringJUnit4ClassRunner.class)`でJUnitテストクラスに注釈をつけ、Springの設定ファイルを手動でロードします。以下を参照してください:
MachineLearningTest.java
package com.mkyong.spring; import com.mkyong.examples.spring.AppConfig; import com.mkyong.examples.spring.DataModelService; import com.mkyong.examples.spring.MachineLearningService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {AppConfig.class}) public class MachineLearningTest { //DI @Autowired @Qualifier("ml") DataModelService ml; @Test public void test__ml__always__return__true() { //assert correct type/impl assertThat(ml, instanceOf(MachineLearningService.class)); //assert true assertThat(ml.isValid(""), is(true)); } }
完了しました。
4.よくある質問
4.1 XMLの場合、これを試してください:
import org.springframework.test.context.ContextConfiguration; @ContextConfiguration(locations = { "classpath:pathTo/appConfig.xml", "classpath:pathTo/appConfig2.xml"}) public class MachineLearningTest {//... }
4.2複数の構成ファイルの場合:
import org.springframework.test.context.ContextConfiguration; @ContextConfiguration(classes = {AppConfig.class, AppConfig2.class}) public class MachineLearningTest {//... }
参考文献
IO – ユニットテスト]。
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html
[Spring
IO – 統合テスト]。 link://unittest/testng-spring-integration-example/[TestNG Spring
統合例]。 link://spring-batch/spring-batch-unit-test-example/[Springバッチユニット
テスト例]