Printemps de démarrage test “Pas de qualification bean de type disponible”
Je suis assez débutant au Printemps de démarrage, mais voici le problème que je me pose 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, je suis en train de démarrer un traitement au printemps, et après cela, faire un peu de cassandra migrations.
J'ai aussi défini un référentiel pour mon modèle d'utilisateur:
//UserRepo.java
public interface UserRepo extends CassandraRepository<User> {
}
Maintenant je suis en train de tester mes pensions de classe à l'aide de simples cas de test:
//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()));
}
}
J'attendrais le test à passer, mais au lieu de cela, j'ai eu une erreur en disant "Non admissible bean de type" com.datastax.le pilote.de base.Cluster "disponible". On dirait le printemps a échoué à autowire la cluster
objet, mais pourquoi est-ce? Comment puis-je résoudre ce problème? Merci beaucoup!
- Là où vous voyez un bean de classe cluster (mise en œuvre d'une Interface de Cluster) dans votre code qui peut être autovired??
- une Solution possible: supprimer ces deux lignes:
@Autowired private Cluster cluster = null;
- Je n'ai pas défini les bean de Classe Cluster, il est censé être assuré par le ressort-amorçage-starter-données-cassandra. Et si je lance mon application, elle fonctionne, tout simplement.
- ensuite, il y a quelque chose dans la testconfiguration manquant
Vous devez vous connecter pour publier un commentaire.
L'environnement de test doit savoir où sont vos haricots sont définis, de sorte que vous avez à dire à l'emplacement.
Dans votre classe de test, ajouter le
@ContextConfiguration
annotation:Applcation
où vous appelezSpringApplication.run(Application.class, args)
n'est pas utilisé si vos tests sont exécutésCluster
. Vous avez besoin (et devrait) séparé config classe ou XML pour les tests unitaires pour créer toute haricots dont vous avez besoin. Aussi,@Autowired private UserRepo userRepo = null;
est redondante. Ce sont la valeur null par défaut. Et vous devriez essayer d'utiliser constructeur injection pour rendre le test plus facile.@SpringBootTest
.