Échec du chargement de l'ApplicationContext lors de l'exécution des Tests d'Intégration
Je suis en train de lancer la mvn integration-test
phase et je suis de Failed to load ApplicationContext
erreur lors de l'intégration de l'exécution des tests (tests unitaires exécuté correctement). Je suis à court de mes tests avec le SpringJUnit4ClassRunner
classe à l'aide d'.
C'est le full stack trace:
2017-02-09 03:22:15.705 [main] ERROR o.s.t.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c072e3f] to prepare test instance [com.dentilax.app.accountservice.AccountServiceIT@768b970c]
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.IllegalStateException: Neither GenericXmlContextLoader nor AnnotationConfigContextLoader was able to load an ApplicationContext from [MergedContextConfiguration@71623278 testClass = AccountServiceIT, locations = '{}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[[empty]], contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]].
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:263)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 25 common frames omitted
Aussi, je suis en utilisant un archétype, vous pouvez voir la annoté Configuration
classes ici. Ce que je fais mal?
C'est ma classe de Test:
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class PatientServiceIT {
private static final String EMAIL = "[email protected]";
private static final String NAME = "test";
private static final String SURNAMES = "account";
private static final String PASSWORD = "testaccount";
private static final String POSTAL_CODE = "15002";
private static final String MOBILE_NUMBER = "694749217";
@Autowired
private AccountRepository accountRepository;
@Autowired
private PatientRepository patientRepository;
@Autowired
private PatientService patientService;
private PatientDetails createPatientDetails() {
return new PatientDetails(EMAIL, PASSWORD, NAME, SURNAMES, MOBILE_NUMBER, POSTAL_CODE);
}
private Account createPatient() {
Account patientAccount = new Account(EMAIL, PASSWORD, NAME, SURNAMES, Role.ROLE_DENTIST);
Patient patient = new Patient(POSTAL_CODE, MOBILE_NUMBER);
patientAccount.setPatient(patient);
return patientAccount;
}
@Test
public void savePatient() {
//call
Patient patient = patientService.save(createPatientDetails());
//assert
assertEquals(patient.getAccount(), createPatient());
}
}
PS: je suis un procès à maven failsafe pour la integration-test
objectif et infaillible por la test
objectif.
- Exécutez-vous vous êtes config entièrement java conduit ou avez-vous encore une ApplicationContext.xml?
- Aussi pouvez-vous montrer votre classe de test,
AccountServiceIT
? - Salut @T. Jung, je suis en utilisant Java config seulement.
- Salut @Morfic j'ai mis à jour ma question avec le code de test
Vous devez vous connecter pour publier un commentaire.
Vous êtes absent de la définition du contexte avec la
@ContextConfiguration(classes = ...)
annotation dans votre test. Commeclasses
vous pouvez définir la configuration unique(s) ou la totalité de votre production de contexte de l'application (qui comprend tous les autres). L'avantage de déclarer seulement les classes de configuration que vous avez besoin est que l'ensemble de l'amorçage pour le test est plus rapide.Remarque: le Printemps des tests de mémoire cache de leur contexte d'application. Si vous devez exécuter les 9/10 des tests avec l'ensemble de la config il faudra moins de temps pour utiliser l'ensemble de la config à nouveau que la déclaration d'une nouvelle série de contexte config. Mais vous devriez chercher à obtenir une petite config empreinte pour vos tests d'intégration, de sorte que vous pouvez vous concentrer sur le domaine de la tranche que vous travaillez et ne pas avoir à manipuler ou de maintenir d'autres contexte configurations.
En général, les tests s'exécutent avec
SpringJUnit4ClassRunner
s'attendre à avoir un contexte d'application pour fonctionner avec.Pour en savoir plus: Lien vers le printemps docs
@ContextConfiguration(classes = Application.class)
et il ne fonctionne pas.. Si je étend la classe de test avecWebSecurityConfigurationAware
fonctionne bien, mais je ne comprends pas pourquoi et je ne trouve aucune information sur ce point...addFilters(springSecurityFilterChain)
(la chaîne de autocâblés/injection).