1. ホーム

[解決済み】JpaTestを行う際に@SpringBootConfigurationを見つけることができない

2022-04-19 01:11:06

質問

フレームワーク初心者(合格したばかり)で、Spring Bootを使うのは初めてです。

CrudRepositoriesが本当に機能しているかどうかを確認するために、簡単なJunitテストを実行しようとしているのです。

というエラーが出続けています。

SpringBootConfigurationが見つからないので、@ContextConfigurationまたは@SpringBootTest(classes=...)をテストに使用する必要があります。 java.lang.IllegalStateException

Spring Bootは自分で設定しないのですか?

私のテストクラス

@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {

@Autowired
private AccountRepository repository;

@After
public void clearDb(){
    repository.deleteAll();
}

 @Test
 public void createAccount(){
     long id = 12;
     Account u = new Account(id,"Tim Viz");
     repository.save(u);

     assertEquals(repository.findOne(id),u);

 }


 @Test
 public void findAccountByUsername(){
     long id = 12;
     String username = "Tim Viz";
     Account u = new Account(id,username);
     repository.save(u);

     assertEquals(repository.findByUsername(username),u);

 }

私のSpring Bootアプリケーションのスターターです。

@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value    {@PropertySource("classpath:application.properties")})
    @EntityScan(basePackages={"domain"})
    public class Application extends SpringBootServletInitializer {
        public static void main(String[] args) {
            ApplicationContext ctx = SpringApplication.run(Application.class, args);         

        }
    }

私のリポジトリ

public interface AccountRepository extends CrudRepository<Account,Long> {

    public Account findByUsername(String username);

    }
}

解決方法は?

確かに、Spring Bootは、ほとんどの場合、自分でセットアップします。投稿されたコードの多く、特に Application .

すべてのクラスのパッケージ名、せめて ApplicationJpaTest . についてですが @DataJpaTest といくつかの他のアノテーションを探すことです。 @SpringBootConfiguration アノテーションが見つからない場合は、パッケージの階層をたどって見つけます。

たとえば、テストクラスの完全修飾名が com.example.test.JpaTest で、あなたのアプリケーション用のものは com.example.Application であれば、テストクラスは @SpringBootApplication (そして、そこで @SpringBootConfiguration ).

しかし、アプリケーションがパッケージ階層の別のブランチに存在する場合、たとえば com.example.application.Application であれば、それは ではなく を見つけることができます。

使用例

次のようなMavenプロジェクトを考えてみましょう。

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
    +--test
      +--com
        +--example
          +--test
            +--JpaTest.java

そして、以下の内容を Application.java :

package com.example;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

のコンテンツが続きます。 JpaTest.java :

package com.example.test;

@RunWith(SpringRunner.class)
@DataJpaTest
public class JpaTest {

    @Test
    public void testDummy() {
    }
}

すべてうまくいっているはずです。の中に新しいフォルダーを作ると src/main/com/example という app を、そしてあなたの Application.java を更新してください。 package の宣言がある場合、テストを実行すると、以下のようなエラーが発生します。

java.lang.IllegalStateException: SpringBootConfigurationが見つからないので、@ContextConfigurationか@SpringBootTest(classes=...)をテストに使用する必要があります。