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から入手できます。