Je suis nouveau dans les frameworks (je viens de passer le cours) et c'est la première fois que j'utilise Spring Boot.
J'essaie d'exécuter un simple test Junit pour voir si mes CrudRepositories fonctionnent effectivement.
L'erreur que je continue de recevoir est:
Impossible de trouver un @SpringBootConfiguration, vous devez utiliser @ContextConfiguration ou @SpringBootTest (classes = ...) avec votre test java.lang.IllegalStateException
Spring Boot ne se configure-t-il pas?
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 démarreur d'application 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);
}
}
Mon référentiel:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
la source
Application
trouve. Si, cependant, vous voulez diresrc/main
etsrc/test
, alors ces dossiers ne font pas partie du package hiérarchie. Vous feriez peut-être mieux de simplement mettre à jour votre question avec une capture d'écran ou une explication de la structure de votre projet.La configuration est attachée à la classe d'application, donc ce qui suit va tout configurer correctement:
Exemple du projet JHipster ici .
la source
Il vaut la peine de vérifier si vous avez refactoré le nom du package de votre classe principale annoté avec
@SpringBootApplication
. Dans ce cas, le cas de test doit être dans un package approprié, sinon il le recherchera dans l'ancien package. c'était le cas pour moi.la source
En plus de ce que Thomas Kåsene a dit, vous pouvez également ajouter
à l'annotation de test pour spécifier où elle doit rechercher l'autre classe si vous ne souhaitez pas refactoriser votre hiérarchie de fichiers. Voici ce à quoi le message d'erreur fait allusion en disant:
la source
Dans mon cas, les packages étaient différents entre les classes Application et Test
et
Après les avoir acceptés, les tests se sont déroulés correctement.
la source
Ça marche pour moi
le nom de package de la classe de test ci-dessus est changé pour le même que le nom de package de la classe normale.
changer cela
la source
La tranche d'essai prévu au printemps de démarrage 1.4 apporté fonctionnalité des capacités de test orientées.
Par exemple,
@JsonTest fournit un environnement Jackson simple pour tester la sérialisation et la désérialisation json.
@WebMvcTest fournit un environnement Web simulé, il peut spécifier la classe de contrôleur pour le test et injecter le MockMvc dans le test.
@DataJpaTest préparera une base de données intégrée et fournira un environnement JPA de base pour le test.
@RestClientTest fournit un environnement client REST pour le test, en particulier RestTemplateBuilder, etc.
Ces annotations ne sont pas composées avec SpringBootTest, elles sont combinées avec une série de
AutoconfigureXXX
et un@TypeExcludesFilter
annotations .Jetez un oeil à
@DataJpaTest
.Vous pouvez ajouter votre annotation @AutoconfigureXXX pour remplacer la configuration par défaut.
Jetons un œil à votre problème,
@DataJpaTest
et@SpringBootTest
, comme indiqué ci@DataJpaTest
- dessus , construira la configuration à sa manière (par exemple, par défaut, il essaiera de préparer un H2 intégré à la place) à partir de l'héritage de configuration de l'application.@DataJpaTest
est désigné pour la tranche de test .@DataJpaTest
, veuillez lire cet article de blog officiel de Spring.io pour ce sujet, (un peu fastidieux).Application
plus petites par fonctionnalités, telles queWebConfig
,DataJpaConfig
etc. Une configuration complète (Web mixte, données, sécurité, etc.) a également provoqué l'échec de vos tests basés sur des tranches de test . Vérifiez les échantillons de test dans mon échantillon .la source
Je pense que la meilleure solution pour ce problème est d'aligner la structure de vos dossiers de tests avec la structure de dossiers de l'application.
J'ai eu le même problème qui a été causé par la duplication de mon projet à partir d'un autre projet de structure de dossiers.
si votre projet de test et votre projet d'application auront la même structure, vous ne serez pas obligé d'ajouter des annotations spéciales à vos classes de tests et tout fonctionnera tel quel.
la source
Lorsque toutes les classes étaient dans le même package, les classes de test fonctionnaient. Dès que j'ai déplacé toutes les classes java vers un package différent pour maintenir une structure de projet appropriée, j'obtenais la même erreur.
Je l'ai résolu en fournissant mon nom de classe principale dans la classe de test comme ci-dessous.
la source
J'ai eu le même problème et j'ai résolu en ajoutant une classe vide annotée
SpringBootApplication
dans le package racine du dossier src / test / javala source
Dans mon cas,
assurez-vous que votre (
test package
nom ) deYourApplicationTests
est équivalent au (main package
nom ).la source
Les annotations ci-dessus ont bien fonctionné pour moi. J'utilise Spring Boot avec JPA.
la source