trategie zum Unit-Testen eines Spring Cloud-Servi
Gab das folgende Spring Cloud-Setup: Adata-service
mit Zugriff auf eine Datenbank, eineureka-service
für die Registrierung und Ermittlung von Diensten und einen dritten Dienstbusiness-service
Dies wird einer von verschiedenen Diensten sein, die Geschäftsfälle zusammenfassen.
Unit testet dasdata-service
ist kein problem, ich schalte eureka einfach über @ a
eureka.client.enabled=false
und verwende eine In-Memory-Datenbank für meine Tests.
Um auf das @ zuzugreifdata-service
vonbusiness-service
, Ich benutze ein@FeignClient("data-service")
Kommentierte Schnittstelle mit dem NamenDataClient
welches ist@Autowired
wo benötigt. Der Dienst wird von Eureka entdeckt, wenn beide ausgeführt werden. Dies funktioniert gut für ein produktionsähnliches Setup, bei dem alle Dienste ausgeführt werden.
Aber jetzt möchte ich einige Funktionen meines @ Unit-Tests durchführebusiness-service
. Es wäre kein Problem, einen Testdienst mit @ zu starte
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@SpringApplicationConfiguration(classes = Application.class)
wie ich mache indata-service
. Das Problem ist die Eureka-abhängige Entdeckung meinesFeignClient
... also meine testklasse stürzt ab, weil das autowiring meinDataClient
-Instanz funktioniert nicht.
Bin ich in der Lage, Spring zu sagen, eine gefälschte Instanz von @ zu verwendDataClient
nur für meine tests? Oder ist der einzige Weg, um meine Tests zum Laufen zu bringen, eine zugängliche, laufende Instanz vondata-service
und mein Eureka-Server?