6

私のアプリケーションでは、外部エンドポイントを呼び出す必要があり、遅すぎるとフォールバックがアクティブになります。回路遮断器のフォールバックが呼び出されたかどうかを確認するための統合テストを実装する方法は?

@FeignClient(name = "${config.name}", url = "${config.url:}", fallback = ExampleFallback.class) 
public interface Example { 
@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) 
    MyReturnObject find(@RequestParam("myParam") String myParam); 
} 

とそのフォールバックの実装:また

@Component 
public Class ExampleFallback implements Example { 

    private final FallbackService fallback; 

    @Autowired 
    public ExampleFallback(final FallbackService fallback) { 
     this.fallback = fallback; 
    } 

    @Override 
    public MyReturnObject find(final String myParam) { 
     return fallback.find(myParam); 
    } 

、回路ブレーカのため設定されたタイムアウト: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

次のコードは、私のアプリがどのように見えるかの例です。

私の回路遮断が機能しているかどうかを確認するために、どのようにして統合テストを実装すればいいですか?つまり、エンドポイント(この場合はmocked)が遅くなったり、4xxや5xxのようなエラーが返ってきたら?

私は春の雲(装う+ Hystrix)

答えて

1

私は装うかHystrixを知ってscroll down toパソコンへ転送ノートで春ブーツ1.5.3を使用しています。

私の意見では、Feign + Hystrixのさまざまなインプリメンテーションの詳細をシミュレートする自動インテグレーションテストを実装するのは問題です。この実装の詳細はいつでも変更できます。プライマリエンドポイントに到達できない、不正なデータ(特別な形式でxmlデータをエクスポートするときにhtmlエラーメッセージを受け取る)、ディスクフルなど.....

エンドポイントはFeign + Hystrixの実装の前提を作ることで、エンドポイントがerrorsituationでどのように振る舞うか(つまりnullを返し、特定のエラーコードを返し、Xyz型の例外をスローします)。

私は、到達不可能なURLを持つ実際のプライマリ・エンポイントと、処理されたデータが模擬から来たものであることを確認する偽のフォールバック・エンドポイントとの統合テストです。 この自動テストでは、「ネットワーク接続が遅すぎます」という処理は、アプリケーションの観点から見た場合の「url-notfound」と同じであることを前提としています。

他のすべてのテストでは、Feign + HystrixをモックするFeign + Hystrixの周りに薄いラッパーインターフェースを作成します。このようにして、プライマリインターフェイスから200バイトを受け取ってからexpetionを取得した場合の動作を自動的にテストすることができます。

外部依存関係の非表示の詳細については、onion-architecture

を参照してください。
関連する問題