2016-04-18 13 views
1

Ich versuche, JUnit Tests ohne Winterschlaf zu starten. Meine Anwendungsklasse:Hibernate im Frühling ausschließen Boot funktioniert nicht

Wie Sie sehen können, habe ich mehr und mehr Sachen ausgeschlossen, aber es ist immer der gleiche Fehler. Meine Tests:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = TestContext.class) 
public class TestMail { 
    @Autowired 
    private Component c; 

    public void setC(Component c) { 
     this.c = c; 
    } 

    @Test 
    public void test() { 
     ... 
    } 

} 

Wenn ich die Tests beginnen Hibernate konfiguriert und irgendwie wird: für die Tests

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (the profiles "dev" are currently active). 

So starten nur die Anwendung oder als Kontext beginnt auch Konfiguration überwintern. Was mache ich falsch?

EDIT: Mit nur:

@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class}) 

keine Ausnahme wirft, bis ich versuche, Sachen tatsächliche Hibernate zu verwenden. Allerdings baut es die Datenbank korrekt ...

EDIT2: Das Problem war eine benutzerdefinierte Config-Klasse, die @EnableJpaRepositories aktiviert hatte. Dies scheint auch nicht möglich zu sein, da mit @Component annotierte Beans, die automatisch gepoolte Repositorys haben, fehlschlagen, da die Beans nicht erstellt werden können.

+0

Soweit ich es verstehe, sollten Sie Komponententests ohne den Spring-Kontext und Integrationstests mit ihm durchführen. Bei Integrationstests sollte der Ruhezustand aktiviert, aber ordnungsgemäß konfiguriert sein (d. H. Auf eine speicherinterne Datenbank zeigen). Diese Punkte werden ausführlich im Abschnitt [Integrationstest] (https://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html) behandelt. Was du versuchst zu tun (eine Art Mischung zwischen den beiden) macht mir wenig Sinn, IMHO. –

+0

Nun, eigentlich gibt es noch viele und viele Komponenten, die nicht von einer Datenbank abhängen. Tatsächlich ist der Teil, der davon abhängt, sehr klein, aber alle Tests starten eine Datenbank, die sie nicht sollten, wenn sie nicht davon abhängen. Aber ich brauche den Anwendungskontext, da er viele unabhängige Konfigurationen für mehrere Komponenten enthält. –

Antwort

0

Versuchen Sie, DataSourceTransactionManagerAutoConfiguration.class zur Ausschlussliste hinzuzufügen. Das hat den Trick für mich gemacht, als ich Hibernate von der automatischen Konfiguration ausschließen musste.

Haben Sie versucht, den Test mit dem Schalter --debug zu starten? Das würde die Autokonfiguration melden (https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html).

+0

Es funktioniert nicht für mich. Auch der --debug Schalter scheint mir keine speziellen Ausgaben für warum oder was sonst noch konfiguriert ist. –

+0

Ich weiß, bekommen '' 'org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen Bean mit Name 'JpaMappingContext': Aufruf der Init-Methode fehlgeschlagen; verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Mindestens ein JPA-Metamodell muss vorhanden sein! '' ' –

Verwandte Themen