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? :)