私は、偽のHTTPサーバー「WireMock」を使って「ユニット」/統合テストをしたい、単純なFeignClientインターフェイスを持っています。考え方は、サンプリングされたHTTP API応答を使用してマッピングをテストし、Springブート/クラウドコンテキスト全体を設定しないことです。テストのためにFeignClientをプログラムでインスタンス化する
@FeignClient(name = "foo", url = "${foo.url}")
public interface FooClient {
@RequestMapping(value = "/foo/{foo-id}/bar", method = RequestMethod.GET)
public Bar getBar(@PathVariable("foo-id") String fooId);
}
プログラムで*RepositoryFactoryBean
を通じて春データリポジトリのように、このインターフェイスを、インスタンス化する方法はありますか?
ソースコード内にFeignClientFactoryBean
がありますが、パッケージ保護されていて、ApplicationContext
オブジェクトを使用して依存関係を取得しています。
ありがとうございますが、これは私が探していたものの完全な反対です。申し訳ありません_ "unit test" _は誤解を招きます。私はSpring Contextを使って単体テスト内のBeanを模倣できることを知っています。Spring Contextを設定することなく、プログラム的に 'FeignClient'実装を作成することができます。クライアントの相対パスが一致するかどうか、JSONマッピングが機能するかどうかをテストしたいと思っています。これはHSQLDBとの永続性統合テストのようです。ソースコードを見るほど、Spring Boot/Cloud Contextなしでは不可能だと思います。 –
@FeignClient自体が春の注釈であるため、これは実際には不可能です。春のソースを調べると、コンテキストが宣言を受け取り、内部的に手動で設定することがわかります。あなた自身でこれを行うことができ、偽のHTTPサーバーに対してテストすることができますが、これは多くの作業になります –
JPAまたはCassandraリポジトリでは注釈付きのインターフェイスも可能です。違いは、Spring DataのFactoryBeanクラスは公開されており、Springコンテキストから完全に切り離されていることです。彼らはおそらく、FeignClientでそれをするのは気にしませんでした。なぜなら、基底のFeignはすでにスタンドアロンのプロジェクトであるからです。 –