Impossible de trouver un @SpringBootConfiguration lors d'une JpaTest
Je suis nouveau sur des cadres (vient de passer à la classe) et c'est ma première fois en utilisant springboot.
Je suis en train de lancer un simple Junit test pour voir si mon CrudRepositories sont en effet à travailler.
L'erreur que je reçois est:
Impossible de trouver un @SpringBootConfiguration, vous devez utiliser @ContextConfiguration ou @SpringBootTest(classes=...) avec votre test
java.lang.IllegalStateException
ne fait pas le printemps de démarrage configurer lui-même?
Ma Classe De Test
@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);
}
Mon de Printemps de l'application de démarrage démarreur
@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);
}
}
Mon Référentiel
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
merci d'avance
Vous devez vous connecter pour publier un commentaire.
En effet, Spring Boot ne se, pour la plupart. Vous pouvez probablement déjà se débarrasser d'une grande partie du code que vous avez posté, en particulier dans
Application
.Je vous souhaite a inclus les noms de toutes vos classes, ou au moins ceux pour
Application
etJpaTest
. La chose à propos de@DataJpaTest
et quelques autres annotations, c'est qu'ils sont pour une@SpringBootConfiguration
annotation dans le package courant, et si ils ne peuvent pas le trouver là-bas, ils traversent la hiérarchie des paquets jusqu'à ce qu'ils la trouvent.Par exemple, si le nom pleinement qualifié pour votre classe de test a été
com.example.test.JpaTest
et celui de votre demande a étécom.example.Application
, alors votre classe de test serait en mesure de trouver la@SpringBootApplication
(et là, le@SpringBootConfiguration
).Si l'application résidé dans une autre branche de la hiérarchie des paquets, cependant, comme
com.example.application.Application
, il serait pas trouver.Exemple
De considérer les éléments suivants projet Maven:
Et puis le contenu suivant dans
Application.java
:Suivie par le contenu de
JpaTest.java
:Tout devrait fonctionner. Si vous créez un nouveau dossier à l'intérieur de
src/main/com/example
appeléapp
, et puis mettez votreApplication.java
à l'intérieur (et mise à jour de lapackage
déclaration dans le fichier), l'exécution de l'essai va vous donner le message d'erreur suivant:Application
est dans. Si, toutefois, vous voulez diresrc/main
etsrc/test
, ces dossiers ne font pas partie de la hiérarchie des paquets. Peut-être vous êtes mieux de simplement mettre à jour votre question avec une capture d'écran ou une explication de ce que votre projet de construction est comme.src/main/java
etsrc/test/java
Configuration est joint à la demande de la classe, de sorte que le suivant sera de tout mettre en place correctement:
Exemple de la JHipster projet ici.
Il vaut la peine de vérifier si vous avez refait nom de package de votre classe principale annoté avec
@SpringBootApplication
. Dans ce cas, les cas de test doivent être dans un package approprié sinon il va être à la recherche pour elle dans l'ancien paquet . cela a été le cas pour moi.En plus de ce que Thomas Kåsene dit, vous pouvez également ajouter
à l'épreuve de l'annotation de spécifier où il devrait regarder de l'autre classe, si vous n'avez pas envie de revoir votre hiérarchie de fichiers. C'est ce que le message d'erreur laisse en disant:
La test tranche fourni au Printemps de Démarrage 1.4 apporté fonction orienté capacités de test.
Par exemple,
@JsonTest fournit un simple Jackson environnement pour tester le json de la sérialisation et la désérialisation.
@WebMvcTest fournit une simulation de l'environnement web, il peut spécifier la classe de contrôleur de test et d'injecter de l'MockMvc dans le test.
@DataJpaTest vous préparer une base de données intégrée et fournit de base JPA de l'environnement pour le test.
@RestClientTest offre RESTE client de l'environnement pour le test, esp les RestTemplateBuilder etc.
Ces annotations ne sont pas composées avec SpringBootTest, ils sont combinés avec une série de
AutoconfigureXXX
et un@TypeExcludesFilter
annotations.Ont un coup d'oeil à
@DataJpaTest
.Vous pouvez ajouter votre @AutoconfigureXXX annotation pour remplacer la valeur par défaut config.
Nous allons jeter un oeil à votre problème,
@DataJpaTest
et@SpringBootTest
, comme dit ci-dessus@DataJpaTest
permettra de construire la configuration à sa manière(par exemple. par défaut, il va essayer de préparer un intégré à l'H2 à la place) de la configuration de l'application à l'héritage.@DataJpaTest
est désigné pour test tranche.@DataJpaTest
, veuillez lire ce blog officiel d'entrée à partir du Printemps.io pour cette rubrique,(un peu fastidieux).Application
dans les petites configurations par fonctionnalités, telles queWebConfig
,DataJpaConfig
etc. Un complet de configuration(mixte du web, des données, de la sécurité, etc) a également provoqué votre test tranche les tests basés sur l'échec. De vérifier la des échantillons d'essai dans mon exemple.Dans mon cas, les paquets étaient différents entre l'Application et les classes de Test
et
Après en avoir fait d'accord les tests couru correctement.
Il travail fo moi
le nom du package de la au-dessus de la classe de test est modifié le même que le nom du package de la classe normale.
changement à ce
Je pense que la meilleure solution à ce problème consiste à aligner vos tests de la structure des dossiers avec le dossier de l'application de la structure.
J'ai eu le même problème qui a été causé par la duplication de mon projet à partir d'un dossier différent de la structure du projet.
si votre projet de test et de votre projet d'application aura la même structure que vous ne sera pas nécessaire d'ajouter toute spéciale des annotations à vos classes de tests et tout fonctionnera comme est.
Au-dessus des annotations a bien fonctionné pour moi. Je suis à l'aide de spring boot avec JPA.