Ich entwickle eine Spring-Boot-Anwendung mit STS mit dem Gradle-Plugin. Ich habe eine andere Konfiguration für Tests, um zu verhindern, dass unsere Selenium-Tests sich anmelden müssen.
Also in src/test/java/etc
habe ich so etwas:
In src/main/java
habe ich eine entsprechende Klasse, die den Login usw. konfiguriert und für alle Seiten eine Anmeldung erfordert.
Wenn ich die Anwendung über das Gradle-Plugin (bootRun) laufe, funktioniert alles einwandfrei.
Wenn ich es jedoch direkt über Eclipse ausführen oder debuggen möchte (z. B. mit der rechten Maustaste auf das Projekt, Ausführen als Start- & gt; Spring Boot App oder durch Klicken auf die Run / Debug-Schaltflächen in der Spring- oder Java-Ansicht), dann wird die Testkonfiguration angewendet, so dass der Zugriff auf alle Seiten ohne Anmeldung gewährt wird.
Ich vermute, dass die Testklassen in den Klassenpfad aufgenommen werden, wenn ich die Anwendung auf diese Weise starte. Gibt es einen einfachen Weg, dies zu verhindern?
Wenn Sie den Test von Eclipse ausführen, wird der Klassenpfad von Eclipse (und nicht von Maven oder Gradle) vorbereitet.
Eclipse verwendet nur einen Klassenpfad pro Projekt und weiß nichts über Abhängigkeitsbereiche (wie 'kompilieren' oder 'testen'). Daher enthält der Klassenpfad immer Ressourcen eines referenzierten Projekts.
Sie können dieses Verhalten der Sonnenfinsternis nicht ändern. Sie müssen Namenskonventionen, Profile usw. verwenden, um eine versehentliche Verwendung von Testressourcen zu vermeiden.
Sie können @TestComponent
an Ihre Testkonfigurationsklasse anhängen. Diese Bean-Konfigurationen werden beim Komponentenscan Ihrer Anwendung übersprungen. Abhängig von der Komponentenscankonfiguration müssen Sie einen @ ComponentScan-Ausschlussfilter definieren:
excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))
Tags und Links eclipse java spring-boot gradle-eclipse