2016-10-30 2 views
0

Ich entwickle Web-Anwendung mit Spring Boot. Ich habe ein Problem mit dem Komponententest für die Webebene. Für diese Tests verwende ich Annotation @WebMvcTest. Problem ist, dass meine Hauptkonfiguration Klasse enthält @PropertySource mit Java Arg, die Pfad zu externen Eigenschaften Datei enthält, und wenn ich meine Einheit Web-Test starten, ist der Fehler aufgetreten, dass dieses Java-Argument nicht analysiert werden kann (natürlich kann ich dieses Java hinzufügen arg, um die Konfiguration meines Tests auszuführen, aber meine Web Unit-Tests benötigen diese Datei nicht).PropertySource aus dem Scannen in SpringBoot WebMvcTest oder anderen Anwendungskontext für WebMvcTest ausschließen

Meine Hauptkonfigurationsklasse:

@SpringBootApplication 
@PropertySource(value = {"${pathto.configfile}"}) 
@EnableAspectJAutoProxy 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

Meine erste Lösung war separate Konfigurationsklasse mit "!test" Profil zu erstellen, und verlagern @PropertySource("..") zu. Und zu meiner Einheit Test @ActiveProfiles("test")

Meine zweite Konfiguration Klasse hinzufügen:

@Configuration 
@Profile({"!test"}) 
@PropertySource(value = {"${pathto.configfile}"}) 
public class PropertyConfiguration { 

} 

Für Einheit Web-Test diese Lösung funktioniert sehr gut. Aber beim Starten meiner Web-App tritt ein neues Problem auf. In meiner externen Eigenschaftendatei habe ich Eigentum spring.profiles.active. Zu dieser Eigenschaft gebe ich oder db oder file Wert. Je nach Wert wird eine entsprechende Implementierung des Repository erstellt und in meine Serviceebene eingefügt. Wenn der Wert db ist, startet die App gut, , aber wenn der Wert file ist, wird ein Fehler ausgegeben: NoSuchBeanDefinitionException.

Als ich in meiner früheren Version wieder (ohne zweite Konfigurationsdatei), startet App in beiden Fällen gut (aber Tests Web-Einheit nicht)

Also, bitte erklären, warum, wenn der Wert von spring.profiles.active=db, App startet gut , aber wenn spring.profiles.active=file - fehlgeschlagen.Und wie kann ich meine Aufgabe lösen? Ich habe versucht, zu finden, wie ich meinen Web Unit-Tests andere Anwendungskontext hinzufügen kann, aber ich habe nicht gefunden. Jede Idee? :)

Antwort

0

Für meine Datenbank-Repositories Ich verwende Spring Data JPA, so dass ich nicht schaffen Umsetzung dieser Repositories, aber ich erstellen Implementierungen meiner Datei Repositories, und meine Implementierungen hatte @Profile("file"). Nach dem Löschen dieser Annotation aus Implementierungen wurde nur auf Schnittstellen verzichtet. Ich weiß nicht, warum eine Config-Klasse funktioniert hat, aber zwei Klassen nicht. Aber das Problem ist gelöst)

Verwandte Themen