2016-07-04 8 views
3

私はスプリングブート+ RESTアプリケーションを持っています。単体テストを書く必要があるときは、直接サービスBeanを呼び出すか、残りのコントローラを呼び出す必要がありますか?残りのコントローラを直接呼び出すと、RestTemplateを使用して残りのAPIをクライアントとして呼び出す必要があります。スプリングブートRESTアプリケーションのテスト方法

ベストプラクティスと必要なプラクティスは何ですか?

サービス豆を直接呼び出すと、コントローラのメソッドコードがカバーされないため、コードカバレッジが低下します。それは受け入れられますか?

答えて

2

で述べたようにRestTemplateを使用うーん、これは複雑な質問ですが、私は私ができる最善のようにお答えします。多くのことは、あなた/組織のリスク許容度とテストに投資する時間に依存します。私は多くのテストを信じていますが、あまりにも多くのことがあります。

ユニットテストは、コードの単位をテストします。素晴らしいですが、ユニットは何ですか?この記事はかなり良い議論です:http://martinfowler.com/bliki/UnitTest.htmlしかし、ユニットは基本的にアプリケーションのテスト可能な最小の部分です。

多くの文献(例えば、https://www.amazon.ca/Continuous-Delivery-Reliable-Deployment-Automation/dp/0321601912/)本であるが、単位非常に低レベルであるテスト、このような各DBまたはファイルシステムまたはリモート・システムのような偽の外部、および「APIの受け入れテスト」(含む試験の複数の相が時々統合テストと呼ばれる説明他のことを意味することがある曖昧な言葉)。この後者のタイプは、アプリケーションのテストインスタンスを起動し、APIを呼び出して応答をアサートします。

単体テストの場合、ユニットに焦点を当てます(おそらくサービスまたはより細かい)が、あなたが記述したもう1組のテスト(クライアントのように動作し、APIを呼び出す)は価値がありますあまりにも。私の提案:両方を行うが、両方のユニットテストを呼び出さない。

+0

私はあなたが統合テストを行う場合、それはあまりにもユニットテストをカバーすると思います。だから、ユニットテストケースを書き直す必要はありません。 – Harshana

+0

討論可能です。単体テストはTDDの一部として作成されることが多いため、若干異なる目的を果たします。彼らは設計を推進し、コンパートメント化と単一の責任を確実にし、開発者がコードを記述する意図と、開発したユニットを使用して開発者がどのように構想したかを明らかにします。 APIレベルの受け入れテストは、あなたが以前に受け入れられた受諾基準に合致したことを確実にするためのものです。 – Taylor

1

ベストアプローチは、VIAコントローラをテストすることです。 Webサービスが入力され、ここに値が返されます。コントローラーはこれでかなり良い役割を果たしています。小さなロジックもあるかもしれませんが、それを逃してしまうかもしれません。

あなたはコントローラのテストにMockMvcメソッドを試すことができます。

参考:Reference-1Reference-2

それとも、質問Reference-3

0

はあなたがRESTテンプレートを使用するには、統合テストとして、あなたのビジネス「サービス」、および他のテストケースをテストするために、あなたが開発者のチームを持っている特別な場合は、あなたのテストを別のテストケースを作ることができ、あなたがテストしたいものに基づいていますこの場合、あなたのバグをより速く簡単に理解することができます。

0

あなたのやりたいことによって異なります。

1つのアプローチは、サービスとMVCコントローラのような作業単位をユニットテストすることです。これらのテストでは、このクラスで見つかった最終的なロジックのみをテストし、該当する場合は高いブランチカバレッジに到達しようとします。 これに加えて、HTTPリクエストを作成し、実際のサービスBeanに移動し、最終的なリソースアクセスのみをモックする統合テストを書くことができます。あなたはSpringのサポートを使用することができます統合テストのために

は、ここを参照してください:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework

関連する問題