2017-01-23 4 views
0

Ich möchte JPA-Test mit spezifischen Federtestprofil haben. Aber irgendwie gelingt es nicht, den Federkontext zu laden.@DataJpaTest beendet die Arbeit mit @Profile Annotation

@RunWith(SpringRunner.class) 
@Profile("myTestProfile") 
@DataJpaTest 
@ContextConfiguration(classes = {TestingConfig.class, MyJpaConfig.class}) 
public class JpaPlusOtherStuffTest { 

    @Autowired 
    private TestEntityManager testEntityManager; 
    ... 
    @Autowired 
    private MyJpaRepository myJpaRepository; 
} 

schlägt mit folgenden Fehler:

java.lang.IllegalStateException: Failed to load ApplicationContext 
... 
Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'myJpaRepository': 
Cannot create inner bean '(inner bean)#5e77f0f4' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; 
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#5e77f0f4': 
Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No bean named 'entityManagerFactory' is defined 

Wenn ich entfernen @Profile Annotation dann Test funktioniert gut. Ich verstehe nur nicht, wie zusätzliches Profil fehlschlägt @DataJpaTest ausgeführt werden. Vielleicht könnte mir jemand das erklären?

UPD ist hier mein MyJpaConfig:

@Configuration 
@EnableJpaAuditing 
@EnableJpaRepositories("com.mycompany.project.jpa") 
@EnableTransactionManagement(proxyTargetClass = true) 
public class MyJpaConfig { 
} 
+0

können Sie Ihre Federkonfiguration posten? –

+0

@ AngeloImmediata hinzugefügt. Andere Konfiguration ist nicht wichtig. Könnte leer sein –

Antwort

3

Mit @ProfileMarken die DataJpaTest ‚s geerbt Konfiguration als myTestProfile Teil des Profils ist. Sie haben jedoch kein Profil aktiviert, daher wird DataJpaTest ignoriert.

ein Profil zu aktivieren, müssen Sie eher @ActiveProfile verwenden:

@RunWith(SpringRunner.class) 
@DataJpaTest 
@ActiveProfiles("myTestProfile") 
@ContextConfiguration(classes = {TestingConfig.class, MyJpaConfig.class}) 
public class JpaPlusOtherStuffTest { 
} 

Ich nehme an, der Zweck des Ganzen ist TestingConfig nur aktiviert, wenn das Gerät Test läuft? Hier müssen Sie die @Profile Annotation hinzufügen:

@Configuration 
@Profile("myTestProfile") 
public class TestingConfig { 
} 
+0

Ja meine Testkonfiguration sieht aus wie du geschrieben hast. Jetzt funktioniert es! Ich habe nur falsche Annotationen verwendet. Vielen Dank! –

Verwandte Themen