1

ユニットテストについて質問があります。

Web サービスへのアダプターであるモジュールをテストします。テストの目的は、Web サービスではなくアダプターをテストすることです。

サービスが提供する 1 つの関数呼び出しは次のようなものです。

class MyAdapterClass {

  WebService webservice;

  MyAdapterClass(WebService webservice) {
    this.webservice = webservice;
  }

  void myBusinessLogic() {
    List<VeryComplicatedClass> result = webservice.getResult();
    // <business logic here>
  }
}

myBusinessLogic 関数を単体テストする場合、通常の方法は、getResult()事前定義された戻り値の関数設定を使用して、Web サービスのモック バージョンを挿入することです。

しかし、ここで私の質問は、実際の Web サービスは、それぞれ数十のプロパティを持つ非常に完成したクラスのリストを返し、リストには数百または数千の要素が含まれる可能性があるということです。

Mockito などを使用して手動で結果をセットアップする場合、それは膨大な量の作業になります。

このシナリオでは、人々は通常何をしますか? 私が単純に行っていることは、実際の Web サービスに接続して、実際のサービスを再度テストすることです。何か良いことはありますか?

どうもありがとう。

4

2 に答える 2

4

実際の Web サービスを呼び出すコードを記述し、List<VeryComplicatedClass>ディスク上のファイルにシリアル化してから、モックのセットアップでそれを逆シリアル化し、mockwebservice.getResult()そのオブジェクトを返すことができます。これにより、オブジェクト階層を手動で構築する必要がなくなります。

更新: これは基本的に、Gilbertがコメントで提案したアプローチでもあります。


しかし、実際には..それぞれが数十のプロパティを持つ非常に完成したクラスのリストを設定したくなく、リストには数百または数千の要素が含まれる可能性があるため、必要最小限のものをキャプチャするモックまたはスタブを設定する必要がありますビジネス ロジックに関するアサーションを記述します。そうすれば、テストは実際に関心のある詳細をより適切に伝えることができます。より具体的には、ビジネス ロジックが 2 つまたは 3 つのメソッドを呼び出す場合VeryComplicatedClass、テストがアサートするものに必要な条件であることをテストで明示する必要があります。

于 2012-04-18T19:33:56.243 に答える
2

コメントを読んで考えたことの 1 つは、ラップList<VeryComplicatedClass>して myBusinessLogic が代わりに使用できるようにする新しいインターフェイスを導入することです。

そうすれば、ほとんど制御できない非常に複雑なクラスを扱うよりも、新しいインターフェイスの実装をスタブまたはモックするのが簡単 (/簡単) になります。

于 2012-04-18T21:20:07.810 に答える