テストのグループを実行するためのJUnit TestRunnerはありますか?

StackOverflow https://stackoverflow.com/questions/153427

  •  03-07-2019
  •  | 
  •  

質問

現在、JUnit 4を使用していますが、テストを任意の組み合わせで選択的に実行できるグループに分割する必要があります。 TestNGにはテストに注釈を付けてグループに割り当てる機能がありますが、今はTestNGに移行できません。これは、いくつかのカスタムアノテーションとカスタムJUnit TestRunnerを使用して、JUnitで簡単に達成できるようです。 JUnitドキュメントとWebの両方をチェックしましたが、そのようなものは見つかりませんでした。誰もそのようなTestRunnerを知っていますか?

更新:テストスイートに関するご回答ありがとうございます。私は元の質問でこれらに対処すべきでした。テストスイートは手動で作成して管理する必要があるため、テストスイートは使用しません。つまり、すべてのテストに触れて、手動でスイートに配置する必要があります(手間がかかり、メンテナンスが面倒です)。私がする必要があるのは、実際に統合テストであるいくつかを除いて、すべての単体テストを実行することです。したがって、これらに注釈を付け、他のすべてを実行します。また、統合テストだけを実行したい場合もあります。また、ユニットテストを複数のグループに入れる必要がありますが、これはスイートでは不可能です。これが問題を解決するのに役立つことを願っています。

更新2:JUnitにこのOOBがない場合、これをJUnitに追加するオープンソースライブラリを探しています(注釈+カスタムJUnitテストランナー)。

役に立ちましたか?

解決

Springの SpringJUnit4ClassRunner IfProfileValue アノテーション。

これ:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

システムプロパティ「test-groups」が「unit-tests」または「integration-tests」に設定されている場合に実行されます。

更新: JUnitExt には @Category および @Prerequisite アノテーションを使用して、必要な処理を行う必要があります。ただし、自分で使用したことはないため、保証することはできません。

他のヒント

JUnitには現時点ではそのようなランナーはいません。根本的な問題に対処するために、限られた時間内にテストスイートから合理的な保証を取得する必要性は、次のリリースの開発における最優先事項です。それまでは、アノテーションを介して機能するFilterを実装することは、大きなプロジェクトではないように思えますが、私は偏っています。

最初に、ユニットテスト(多くの場合、テスト対象のユニットと同じパッケージ内)と統合テストの2つの問題に対処します。私は通常、com.example.project.testsのような別のパッケージに統合テストを保持します。日食では、私のプロジェクトは次のようになります。

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

パッケージを右クリックして「実行」を選択すると、パッケージ内のテストが実行されます。ソースフォルダーで同じことを行うと、すべてのテストが実行されます。

スイートランナー。ただし、これはDRYに違反します。スイートクラスではテスト名のコピーを最新に保つ必要があります。ただし、同じテストを複数のスイートに簡単に配置できます。

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

もちろん、これらのことを自動化しておく必要があります。そのための良い方法は、 Antタスクを使用することです。

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

いいえ、残念ながらTestNGグループに類似した概念はありません。 JUnit4向けに計画されていましたが、何らかの明確な理由により、計画から除外されました。

スイートを作成できますが、すべての構成は注釈ではなくスイートに配置されます。

JUnit 3では、他のテストと同様に実行できるテストスイートを作成できます。 JUnit 4にも同様の概念はありませんか?

ANTまたはmavenを使用している場合、テストを名前でフィルタリングすることにより、実行するテストを制御できます。少し厄介ですが、それはあなたのために働くかもしれません。

TestNGに投票があります。アノテーションベースで、グループ、単一のテストなどとして実行でき、Mavenにリンクでき、テスト実行の一部としてすべてのJUnitテストを実行できます。

JUnitよりも強くお勧めします。

私のアドバイスは、単にJUnitを捨ててTestNGを使用することです。 TestNGに慣れると、Junitは石器時代のように見えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top