コンポーネントクラスを使用したコンテキスト設定

コンポーネントクラス(Java ベースのコンテナー構成を参照)を使用して ApplicationContext をテスト用にロードするには、テストクラスに @ContextConfiguration のアノテーションを付け、コンポーネントクラスへの参照を含む配列で classes 属性を構成できます。次の例は、その方法を示しています。

  • Java

  • Kotlin

@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) (1)
class MyTest {
	// class body...
}
1 コンポーネントクラスの指定。
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = [AppConfig::class, TestConfig::class]) (1)
class MyTest {
	// class body...
}
1 コンポーネントクラスの指定。
コンポーネントクラス

「コンポーネントクラス」という用語は、次のいずれかを指します。

  • @Configuration アノテーションが付けられたクラス。

  • コンポーネント(つまり、@Component@Service@Repository、その他のステレオタイプアノテーションが付けられたクラス)。

  • jakarta.inject アノテーションが付けられた JSR-330 準拠のクラス。

  • @Bean メソッドを含むクラス。

  • Spring コンポーネント(つまり、ApplicationContext の Spring Bean)として登録することを目的とするその他のクラス。潜在的に Spring アノテーションを使用せずに単一のコンストラクターの自動オートワイヤーを利用します。

@Bean Lite モードの説明に特に注意を払いながら、コンポーネントクラスの構成とセマンティクスに関する詳細については、@Configuration (Javadoc) および @Bean (Javadoc) の javadoc を参照してください。

@ContextConfiguration アノテーションから classes 属性を省略すると、TestContext フレームワークはデフォルトの構成クラスの存在を検出しようとします。具体的には、AnnotationConfigContextLoader および AnnotationConfigWebContextLoader は、@Configuration javadoc で指定されているように、構成クラス実装の要件を満たすテストクラスの static ネストクラスをすべて検出します。構成クラスの名前は任意です。さらに、テストクラスには、必要に応じて複数の static ネストされた構成クラスを含めることができます。次の例では、OrderServiceTest クラスは、テストクラスの ApplicationContext をロードするために自動的に使用される Config という名前の static ネストされた構成クラスを宣言します。

  • Java

  • Kotlin

@SpringJUnitConfig (1)
// ApplicationContext will be loaded from the static nested Config class
class OrderServiceTest {

	@Configuration
	static class Config {

		// this bean will be injected into the OrderServiceTest class
		@Bean
		OrderService orderService() {
			OrderService orderService = new OrderServiceImpl();
			// set properties, etc.
			return orderService;
		}
	}

	@Autowired
	OrderService orderService;

	@Test
	void testOrderService() {
		// test the orderService
	}

}
1 ネストされた Config クラスから構成情報をロードします。
@SpringJUnitConfig (1)
// ApplicationContext will be loaded from the nested Config class
class OrderServiceTest {

	@Autowired
	lateinit var orderService: OrderService

	@Configuration
	class Config {

		// this bean will be injected into the OrderServiceTest class
		@Bean
		fun orderService(): OrderService {
			// set properties, etc.
			return OrderServiceImpl()
		}
	}

	@Test
	fun testOrderService() {
		// test the orderService
	}
}
1 ネストされた Config クラスから構成情報をロードします。