環境
- ArchUnit 1.0.1
ArchTest だけを実行したい
私のプロジェクトではコーディング規約を ArchTest として実装し、ユニットテストと共に実行できるようにしています。
ただ、テストケースをすべて実行すると割と時間がかかります。
規約チェックのために ArchTest だけを選択的に実行したい。
そこで、試しに JUnit の @Tag
アノテーションを付けてみましたが動作しませんでした。
原因は調べていませんが、たぶん @Tag
は @Test
アノテーションが付いているものだけを実行対象としてリストアップするんでしょう。
調べると、@ArchTag
アノテーションという @Tag
アノテーションに相当するものが ArchUnit に用意されていたため、これを使って実現しました。
実装
ArchTest に ArchTag アノテーションを付ける
まず ArchTest を収録している TestCase に @ArchTag
を付けます。
FooTest.java
@AnalyzeClasses(
packages = {"io.github.takeyoda"},
importOptions = ImportOption.DoNotIncludeTests.class)
@ArchTag("ArchTest")
class FooTest {
@ArchTest
public static final ArchRule SOME_TEST = classes().that()...;
}
build.gradle に専用のタスクを追加
build.gradle
に ArchTest だけを実行するタスクを追加します。
build.gradle
tasks.register('archTest', Test) {
testLogging {
events 'passed', 'skipped', 'failed'
}
useJUnitPlatform {
includeTags 'ArchTest'
}
}
実行例
追加したタスクを実行します。
$ ./gradlew archtest
まとめ
@ArchTag
アノテーションを使って ArchUnit のテストケースをカテゴライズする方法を紹介しました。