0

次の状況を考えると、プロジェクト/モジュールの編成に関するいくつかの提案は何であるか疑問に思っています:

  1. DomainObjectsクラスがあるプロジェクトがありますMyObject
    1. /src/test/javaのテストDomainObjectsがありますMyObject
  2. Clientに依存するプロジェクトがありますDomainObjects

のテストで使用する のテスト インスタンスを提供するために、ParameterSupplier呼び出されたクラスを追加したいと思います。MyObjectTestSupplierMyObjectClient

プロジェクトで提供MyObjectTestSupplierすることが最も理にかなっているようです。DomainObjectsこれが私のジレンマです...

  1. もし私がサプライヤーを入れたらsrc/test/javaDomainObjectsそれは利用できなくなりますClient
  2. これは、JUnit をコンパイルの依存関係として含める必要があり、それによって製品コードに含める必要がsrc/main/javaあるためです。DomainObjectsDomainObjects
  3. サプライヤをプロジェクトDomainObjectsTestに参加させる場合、3 つの選択肢があります
    1. サプライヤーだけがテストプロジェクトですが、これはテストでDomainObjectsこのサプライヤーを使用できなかったことを意味します。
    2. すべてのテストとサプライヤーを入れますがDomainObjects、それはテストが失敗した場合でもmavenによって正常にコンパイルされることDomainObjectsTestを意味しますDomainObjects
    3. との両方src/test/javaでサプライヤーをコピーします。DomainObjectssrc/main/javaDomainObjectsTest

DomainObjectsTestのモジュールを作成しようと考えましたが、パッケージ化がここで機能しないDomainObjects場合にのみ機能します。DomainObjectspom

考え?提案?

編集: 説明として、MyObject単純な Bean (getter と setter のみ) でありParameterSuppier、Bean のインスタンスを作成するためにパターンを使用します。サプライヤーは、テストで使用する Bean の移入されたインスタンスを簡単に作成するためのユーティリティ メソッドを提供します。これは、プロジェクト全体でこの人口コード (または同等のモッキング) を繰り返さないようにするためです。

4

2 に答える 2

1

この特定のトピックに関する公式のMavenミニガイドにDomainObjectsあるように、プロジェクトのテストアーティファクトをローカルのMavenリポジトリ(または必要な場所または可能な場所)に公開し、プロジェクトDomainObjects-X.Y-testsのテストスコープの依存関係としてアーティファクトを使用する必要がありますClient

テストアーティファクトの公開は、Maven JARプラグインjar:test-jarゴールを使用して行われます。

このアーティファクトをテストスコープの依存関係としてプロジェクトに含めると、Clientプロジェクトに依存する他のプロジェクトはプロジェクトのテストアーティファクトClientを継承しません。これは、Mavenの公式ガイドに記載されているように、テストスコープの依存関係はデフォルトでは推移的ではないためです。依存関係のメカニズムDomainObjects

于 2012-10-26T04:24:45.337 に答える
1

それはあなたが説明しているものの悪い設計例です。単体テストは、外部依存関係に依存して「単体」になることはできません。

必要なことは、すべての依存関係をモックし、Clientコードのみをテストすることです。Mockitoまたは選択した別のライブラリを使用MyObjectして、このクラスが行うことを期待するクライアント プロジェクトでのモック インスタンスを作成します。MyObject独自のプロジェクトで動作をテストします - DomainObjects.

mockito では、モックを作成するだけです:

import static org.mockito.Mockito.*;
...
MyObject myMock = mock(MyObject.class);
when(myMock.doWhatYouNeed(params)).thenReturn(whatYouExpect);

編集:

別のアイデア

DomainObjects のテストをここで説明するタイプのアーティファクトとして公開test-jarクライアントでテスト範囲の依存関係として使用します。でもこれはかなりヤバい…

素敵なデザインは:

  • DomainObjectAPIでプロジェクトMyObject
  • DomainObjectTestSupplierDomainObjectAPI提供業者を利用し、
  • DomainObjectDomainObjectAPIコンパイルとDomainObjectTestSupplierテストに使用
  • Clientを使用してDomainObjectAPIDomainObjectコンパイルおよびDomainObjectTestSupplierテストに使用します。

それはただのやり過ぎです。

于 2012-10-25T16:25:17.123 に答える