Ich verwende Federwolke Eureka und vortäuschen, um zwischen einigen Diensten zu kommunizieren (sagen wir A und B). Jetzt möchte ich meine Service-Schicht eines einzelnen Dienstes (A) unittest. Das Problem ist, dass dieser Dienst (A) einen Schein-Client verwendet, um einige Informationen des anderen Dienstes (B) anzufordern.Mock ein Eureka Feign Client für Unittesting
Das Ausführen der Unittests ohne spezielle Konfiguration löst die folgende Ausnahme aus: java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-b
=> aber ich möchte keinen Server ausführen.
Meine Frage ist: Gibt es eine Möglichkeit, den Schein-Client zu verspotten, so kann ich meinen Dienst (A) unittest ohne eine Eureka-Instanz und Dienst (B) zu betreiben?
Edit: Ich endete damit, einen Stub für den Schein Client zu erstellen. Der Stub wird als eine primäre Komponente markiert, um die Feder zu zwingen, den Stub innerhalb meiner Tests zu instantiieren.
Dies ist die Lösung, die ich mir ausgedacht habe.
//the feign client
@FeignClient("user")
public interface UserClient {
UserEntity getUser();
}
//the implementation i use for the tests
@Component
@Primary //mark as primary implementation
public class UserClientTestImpl implements UserClient {
@Override public UserEntity getUser() {
return someKindOfUser;
}
}
Dies ist die Lösung, die ich mit so weit kam: Die feign Schnittstelle '@FeignClient ("user") public interface UserClient { // einige feign Anmerkungen UserEntity getUser(); } ' Die Implementierung i für die Tests verwenden ' @Component @Primary public class UserClientTestImpl implementiert UserClient { @Override public UserEntity getUser() { return someKindOfUser; } } ' Grundsätzlich ist es die Methode, die Sie @Markon erwähnt haben. –
Könnten Sie vielleicht den Code in Ihre Frage schreiben? Es ist schwer Code in den Kommentaren zu lesen: D Ich bin froh, dass es geholfen hat. Wenn Sie das Verhalten testen möchten, dann können Sie Spott verwenden. Wenn Sie die "Verbindung" testen möchten, richten Sie einen kleinen Webserver ein! : P – Markon