11

エンタープライズ レベルの Java サービスの単体テスト ケースを作成するために依存サービスをモックする場合、単体テスト ケースのデータを設定するのは非常に面倒です。ほとんどの場合、これが、開発者が単体テスト ケースを作成せず、統合スタイルのテスト ケースを作成する最も説得力のある理由の 1 つです。サービスが他のいくつかのサービス (それぞれの DAO に依存) と独自の DAO に依存している場合、when-thenReturn合理的にネストされたオブジェクトの句を作成するのはかなりの労力となり、開発者は簡単な方法を取り、Spring コンテキスト全体をロードし、必要なすべてのコード パスを通過できるデータを常に提供するとは限らない直接ソースからデータを調達しているように見えます。これを背景に、私の同僚は、サンプル統合テストを実行し、アスペクトを使用して、関連するすべてのデータ ポイントをキャプチャし、単体テストのテスト データを具体化するために使用できる XML 表現にシリアル化することを提案しました。ケース。驚いたことに、githubでこれと非常によく似たTestDataCaptureJというフレームワークを見つけました。アスペクトを使用してデータ ポイントをキャプチャし、Java コードを生成してオブジェクトを作成しました。

サイトに記載されている動機は非常に適切に思えたので、同様の機能を提供できる代替手段が他にないかどうか疑問に思っていました. また、専門家がこの全体的なアプローチを批判できれば素晴らしいことです。

また、このプロジェクトは約 2 年前のもので、修正が必要ないくつかのバグがあり、mavenized github フォークとして返してくれることを望んでいます。有名な厩舎の 1 つから同様のイニシアチブが他にないことを確認するだけです。

前もって感謝します!

4

1 に答える 1

10

そのアプローチには2つの批判があります...そして、あなたの文脈に関する私の知識はほとんどないことを覚えておいてください。つまり、ここで提案することはあなたにとってうまくいかないかもしれません。

あなたがおっしゃったような問題を一度だけ経験しましたが、責任が広範であったために、オブジェクト間の結合が多すぎるという症状でした。それ以来、私はドメイン駆動設計アプローチを使用しており、この問題は二度とありません。

私はテストデータビルダーを使用してテストデータを作成することを好みます。このアプローチにより、作成したいもののテンプレートを作成し、テストに関心のあるビットを置き換えることができます。この方法を選択する場合は、これらのビルダーの作成を簡素化するMake-It-Easyという小さなライブラリを使用することを強くお勧めします。

そして2つの提案

時間があれば、私はあなたに勧めます

  1. MichaelFeathersによる「妥当性と優れたデザインの深い相乗効果」と呼ばれるプリセットをご覧ください-講演の一部は、あなたが経験しているものと非常によく似たものについてです。
  2. 「 GrowingObject-OrietedSystems、Guided by Tests (aka GOOS) 」という本を読んでください。この本には、シンプルで驚くべきテスト可能なコードの書き方に関するあらゆる種類の洞察があります。
于 2012-09-24T19:31:46.747 に答える