2017-07-31 5 views
0

私たちは、私たちのプロジェクトの1つでFeign + Ribbonを使用しようとしています。プロダクションコードでは、問題はありませんが、jUnitテストではいくつかあります。リボンで飾る:リセット

状況(失敗したサービス、正常な実行、例外など)の数をシミュレートしようとしています。したがって、リボンの統合を何度も設定する必要があります。残念ながら、Springのコンテキストを破棄しても、状態の一部はおそらく静的変数のどこかに残っていることに気付きました(例:新しいテストは前のスイートのバランサーに接続しています)。

両方のツールの静的状態をパージする方法はありますか? (Hystrix.reset()のようなもの)

ありがとうございます!


私たちは、各スイートの後にJVMをリセットしようとした - それは完璧に動作しますが、その非常に実用的ではない(私たちはGradleのアイデアの両方でそれを設定する必要があります(アイデアテストtunnerとして箱から出して、これを尊重していません) )。また、テスト間でサービスの名前を変更しようとしました。何らかの理由で失敗することがあります(99%と言うこともあります)。

答えて

0

どこか静的な状態がある場合は、 。あなたがそれをすることができない場合は、最小限のコードが問題を引き起こすものを見つけ出し、何もしません。あなたのコードベースでは、finalとrefactorでないstaticの使用を検索する必要があります。

さらに、さまざまな種類のテストを強力に区別することが役立つ場合があります。あなたが私にユニットテストをしているようには聞こえません。これらのサービスをシミュレートしているだけで、失敗をシミュレートしているにもかかわらず、この種のテストは実際には統合テストです。リボンが独自のコンポーネントで正しく構成されているかどうかをテストしています。コンポーネントがリボンを正しく構成しているかどうかだけをテストするならば、単体テストになります。私が意味するかどうかは分かりませんが、それは微妙な違いですが、テストに大きな影響を与えます。

もう1つ注意しておきたいのは、あなたが今持っていることを必ずしも悪い考えとして却下しないことです。これがミッションクリティカルな機能であれば、Feignの動作をチェックする重い重量の積分テストを行うことは非常に便利かもしれません。その場合はIMOです。しかし、それは重い重量の統合テストであり、そのように扱われるべきです。このようなテストを実現するために、いくつかのコンテナ・マジックを使用して、さまざまな異なる障害シナリオで失敗するサービスを使用することもできます。これはCIに存在し、通常、開発者は統合についての機能で直接作業していない限り、コミットするたびにその人を実行しません。