私は春の雲のユーレカを使って、いくつかのサービス(AとBと言うことができます)間で通信するようにしています。今では、単一のサービス(A)の私のサービス層をunittestするのが好きです。問題は、このサービス(A)が他のサービス(B)の情報を要求するためにクライアントを使用していることです。ユニットテストのためにユーレカ・フェーン・クライアントを模擬しました
特別な設定をせずにunittestを実行すると、次の例外が発生します。java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-b
=>しかし、私はサーバーを実行したくありません。
私の質問は:フェイングクライアントを模擬する方法があるので、私はユリーカインスタンスとサービス(B)を実行しないで私のサービス(A)をユニットテストできるのですか?
編集: 私はfeignクライアント用のスタブを作成しました。スタブは、テストでスタブをインスタンス化するスプリングを強制的に起動するための主要コンポーネントとしてマークされています。
これは私が思いついた解決策です。
//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;
}
}
これは私がこれまでに思い付いたソリューションです: 装うインタフェース '@FeignClient( "ユーザー") パブリック・インタフェースUserClient {// 一部装う注釈 UserEntityのgetUser(); } '私がテストに使用 実装' @Component @PrimaryパブリッククラスUserClientTestImplがUserClient { @Override公共UserEntityのgetUser(){ 戻りsomeKindOfUserを実装します。 }} ' 基本的にそのあなたが@Markonを言及している方法。 –
あなたは多分あなたの質問にコードを投稿してもらえますか?これはコメントでコードを読むのは難しい:D私はそれが助け幸せです。あなたが行動をテストしたい場合は、あなたはモックを使用することができます。あなたが「接続」をテストする場合は、セットアップ小さなウェブサーバ! :P – Markon