テストのグループを実行するためのJUnit TestRunnerはありますか?
-
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 がありますcode>アノテーションを使用して、必要な処理を行う必要があります。ただし、自分で使用したことはないため、保証することはできません。
他のヒント
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は石器時代のように見えます。