2016-09-13 5 views
1

私は、偽の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オブジェクトを使用して依存関係を取得しています。

答えて

0

さて、あなたはでき偽のテストのためにwiremockを使用して、実際の残りのクライアントが、これはその人自身が動作するクライアントを装う機能テストを含む詳細です。実際に必要とするのは、クライアントが特定の方法で動作するようにコンポーネントをテストする必要があるためです。

私のベストプラクティスは、偽のサーバーを維持してライブをするのではなく、クライアントの動作をMockitoでモックすることです。

は、あなたが内部的にあなたの FooClientが与えられたとfooで作業する必要がありますいくつかのビジネスロジックを実行し、いくつかの FooBarService::someAction(String fooId)を、peformするために使用するいくつかの FooBarServiceを、持って考えてみましょう:あなたは春ブーツ1.4.0使用している場合は、ここに行くための方法ですID

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = App.class) 
class FooUnitTest { 

    @Autowired; 
    private FooBarService fooBarService; 

    @MockBean; 
    private FooClient fooClient; 

    @Test 
    public void testService() { 
     given(fooClient.getBar("1")).willReturn(new Bar(...)); 

     fooBarService.someAction("1"); 

     //assert here, that someAction did what it supposed to do for that bar 
    } 
} 

は、この時点では、最初に「/ FOO/1 /バー」を求めたときに、正確にそのような場合のためのモックを作成することによって、あなたはRESTクライアントが応答することを期待するもの、明確にし、バーオブジェクトを与える必要がありますそのAPIの受信を期待し、アプリケーションが希望の状態にあることを主張します。

+0

ありがとうございますが、これは私が探していたものの完全な反対です。申し訳ありません_ "unit test" _は誤解を招きます。私はSpring Contextを使って単体テスト内のBeanを模倣できることを知っています。Spring Contextを設定することなく、プログラム的に 'FeignClient'実装を作成することができます。クライアントの相対パスが一致するかどうか、JSONマッピングが機能するかどうかをテストしたいと思っています。これはHSQLDBとの永続性統合テストのようです。ソースコードを見るほど、Spring Boot/Cloud Contextなしでは不可能だと思います。 –

+0

@FeignClient自体が春の注釈であるため、これは実際には不可能です。春のソースを調べると、コンテキストが宣言を受け取り、内部的に手動で設定することがわかります。あなた自身でこれを行うことができ、偽のHTTPサーバーに対してテストすることができますが、これは多くの作業になります –

+0

JPAまたはCassandraリポジトリでは注釈付きのインターフェイスも可能です。違いは、Spring DataのFactoryBeanクラスは公開されており、Springコンテキストから完全に切り離されていることです。彼らはおそらく、FeignClientでそれをするのは気にしませんでした。なぜなら、基底のFeignはすでにスタンドアロンのプロジェクトであるからです。 –

関連する問題