1. 序章
Spring Boot でのテストに関するチュートリアルでは、@DataJpaTestアノテーションの使用方法を確認しました。
この次のチュートリアルでは、エラー「@SpringBootConfigurationが見つかりません」を解決する方法を説明します。
2. 原因
@DataJpaTest アノテーションは、JPAテストを設定するのに役立ちます。 このために、無関係な部分を無視して、アプリケーションを初期化します。 たとえば、MVCコントローラーは無視されます。
ただし、アプリケーションを初期化するには、構成が必要です。
このために、現在のパッケージを検索し、構成が見つかるまでパッケージ階層を上に移動します。
たとえば、 com.baeldung.data.jpa package。に@DataJpaTestを追加して、次の構成クラスを検索します。
- com.baeldung.data.jpa
- com.baeldung.data
- 等々
ただし、構成が見つからない場合、アプリケーションはエラーを報告します。
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...)
with your test java.lang.IllegalStateException
これは、たとえば、構成クラスがcom.baeldung.data.jpa.applicationなどのより具体的なパッケージにあるために発生する可能性があります。
構成クラスをに移動しましょう com.baeldung.data.jpa。 その結果、Springはそれを見つけることができるようになります。
一方、@SpringBootConfigurationを持たないモジュールを作成することもできます。 次のセクションでは、このシナリオを検討します。
3. @SpringBootConfigurationがありません
モジュールに何も含まれていない場合はどうなりますか @SpringBootConfiguration? それには複数の理由が考えられます。 このチュートリアルでは、モデルクラスのみを含むモジュールがあると仮定します。
したがって、解決策は簡単です。 @SpringBootApplicationをテストコードに追加しましょう。
@SpringBootApplication
public class TestApplication {}
注釈付きのクラスができたので、Springはテストをブートストラップできるようになりました。
セットアップを検証するために、 TestEntityManager を挿入し、設定されていることを検証しましょう。
@RunWith(SpringRunner.class)
@DataJpaTest
public class DataJpaUnitTest {
@Autowired
TestEntityManager entityManager;
@Test
public void givenACorrectSetup_thenAnEntityManagerWillBeAvailable() {
assertNotNull(entityManager);
}
}
このテストは、Springが独自のパッケージまたはその親パッケージの1つで@SpringBootConfigurationを見つけることができる場合に成功します。
4. 結論
この短いチュートリアルでは、エラーの2つの異なる原因を調べました。「@SpringBootConfigurationが見つかりません」。
まず、構成クラスが見つからなかった場合を調べました。 これはその場所のせいでした。 構成クラスを別の場所に移動することで解決しました。
次に、構成クラスが使用できないシナリオを検討しました。 テストコードベースに@SpringBootApplicationを追加することで、これを解決しました。
いつものように、記事の完全なソースコードは、GitHubでから入手できます。