2017-07-05 6 views
0

は、私がここにブーツを春にはかなり初心者だけど、私が今直面してる問題ですその後、いくつかのカサンドラ移行を行います。春のブートテスト「利用できるタイプのない予選豆」

私はまた私のユーザモデルのリポジトリを定義しています

// UserRepo.java 
public interface UserRepo extends CassandraRepository<User> { 
} 

今、私は次のような単純なテストケース使って私のレポクラスをテストしようとしています:

// UserRepoTest.java 
@RunWith(SpringRunner.class) 
@AutoConfigureTestDatabase(replace = Replace.NONE) 
@DataJpaTest 
public class UserRepoTest { 

    @Autowired 
    private UserRepo userRepo = null; 

    @Autowired 
    private TestEntityManager entityManager = null; 

    @Test 
    public void findOne_whenUserExists_thenReturnUser() { 
    String id = UUID.randomUUID().toString(); 
    User user = new User(); 
    user.setId(id); 
    this.entityManager.persist(user); 

    assertEquals(this.userRepo.findOne(user.getId()).getId(), id); 
    } 

    @Test 
    public void findOne_whenUserNotExists_thenReturnNull() { 
    assertNull(this.userRepo.findOne(UUID.randomUUID().toString())); 
    } 
} 

を私は期待代わりに、 "com.datastax.driver.core.Cluster 'が利用可能なタイプの修飾Beanはありません"というエラーが表示されました。 オブジェクトをオートターンするのに失敗したようですが、それはなぜですか?これをどうやって解決するのですか?どうもありがとう!

+0

を?? – Jens

+1

解決策:この2行を削除してください: '@Autowired private cluster cluster = null;' – Jens

+0

私はクラスクラスタのbeanを定義していません。これはspring-boot-starter-data-cassandraによって提供されるはずです。私のアプリケーションを実行すると、それだけで動作します。 – fengye87

答えて

4

テスト環境では、Beanが定義されている場所を知っている必要があります。そのため、場所を伝える必要があります。あなたのテストクラスで

@ContextConfiguration注釈を追加:あなたはautoviredすることができ、あなたのコード内のクラスクラスタ(インターフェースクラスタの実装)の豆を見

@RunWith(SpringRunner.class) 
@AutoConfigureTestDatabase(replace = Replace.NONE) 
@DataJpaTest 
@ContextConfiguration(classes = {YourBeans.class, MoreOfYourBeans.class}) 
public class UserRepoTest { 

    @Autowired 
    private UserRepo userRepo = null; 

    @Autowired 
    private TestEntityManager entityManager = null; 
+0

私は、クラスタインスタンスがアプリケーションのブートストラップのようにautowiredになることを期待していました。テスト環境の違いは何ですか? – fengye87

+0

AFAIK、 'SpringApplication.run(Application.class、args) 'を呼び出すクラス' Applcation'は、テストの実行時には使用されません。 – JimHawkins

+0

Jimのステートメントは正しいです。 Springブートアプリケーションでは、 'Cluster'を提供している設定クラスがあります。必要なBeanを作成するために単体テスト用に別のconfigクラスまたはXMLが必要です(必要があります)。また、 '@Autowired private UserRepo userRepo = null;'は冗長です。これらはデフォルトでnullです。また、[コンストラクタインジェクション](https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-spring-beans-and-dependency-injection.html)を使用して、テストを容易にする。 –

関連する問題