web-dev-qa-db-fra.com

Test de démarrage de printemps "Pas de bean qualificatif de type disponible"

Je suis un débutant dans Spring Boot, mais voici le problème auquel je suis confronté maintenant:

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

  @Autowired
  private Cluster cluster = null;

  @PostConstruct
  private void migrateCassandra() {
    Database database = new Database(this.cluster, "foo");
    MigrationTask migration = new MigrationTask(database, new MigrationRepository());
    migration.migrate();
  }
}

Donc, fondamentalement, j'essaie de bootstrap une application Spring, et après cela, faire des migrations cassandra).

J'ai également défini un référentiel pour mon modèle utilisateur:

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

Maintenant, j'essaie de tester ma classe repo en utilisant le cas de test simple suivant:

// 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()));
  }
}

Je m'attendrais à ce que le test réussisse, mais à la place, j'ai eu une erreur disant "Pas de bean de qualification de type 'com.datastax.driver.core.Cluster' disponible". Il semble que Spring n'ait pas câblé automatiquement l'objet cluster, mais pourquoi? Comment puis-je réparer ça? Merci beaucoup!

15
fengye87

L'environnement de test doit savoir où vos beans sont définis, vous devez donc lui indiquer l'emplacement.

Dans votre classe de test, ajoutez le @ContextConfiguration annotation:

@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;
25
JimHawkins