最近、Groovyの良さを再認識したので、Visual Studio CodeとGroovyで気軽にJUnit 5を試そうと思ったら、変な方向で苦労したので、自分の環境備忘録として残しておく。
今回やりたいのは、こんなこと。
- JUnit 5を使ってテストを書いてみるのを気軽に書き捨てたい
- 書き捨てだから、GradleとかIntelliJ IDEAを使わずに、.groovyファイル1つで動かしたい
- 使い慣れてきたVS Codeで書いて実行できたら良いな
結果的に、2つの方法で上記が満たせた。
両者に共通するのは、 VS CodeでCode Runnerプラグインを使う こと。
JUnit 5をGroovyで書くサンプル
まず、Grabも使いながらJunit 5を試すGroovyは、こんな感じ。Grab便利。
@Grab("org.junit.jupiter:junit-jupiter-api:5.4.1")
@Grab("org.junit.jupiter:junit-jupiter-engine:5.4.1")
@Grab("org.junit.platform:junit-platform-console:1.4.1")
import static org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.*
// テスト対象クラス
class Calc {
def add(a, b) {
a + b
}
}
// テストクラス
class CalcTest {
def calc
@BeforeEach
def before() {
calc = new Calc()
}
@Test
def addTest() {
assertEquals(calc.add(1, 1), 2)
}
}
class AtomicTest {
@Test
def test() {
assertEquals(2, 1 + 1)
}
}
方法1:junit-platform-console-standaloneを使ってファイルごと動かす
- Maven Central Repositoryから、junit-platform-console-standaloneのjarをダウンロード
- ダウンロードしたjarファイルを、
~/bin
のような分かりやすいところに置く - VS Codeの
settings.json
に以下を追記
"code-runner.executorMap": {
"junit5": "java -jar ~/bin/junit-platform-console-standalone-1.4.2.jar -f $fileName"
}
こうすると、 Control + Option + j
(Macの場合)かコマンドパレットの Run by Languageから junit5
を選択して実行できるようになる。
ただ、VS Codeの出力タブに出すとターミナル向けの制御文字が化けた感じになるのと、結果レポート出力のツリーが正常に動かないのがネック。
方法2:JUnit5Runnerクラスを使って1クラスのテストだけ動かす
こっちは、書いた.groovyファイル内に、こんなコードを追加すると動くようになる。
import groovy.junit5.plugin.JUnit5Runner
new JUnit5Runner().run(テストクラス.class, new GroovyClassLoader())
これは、本当に.groovyファイル1つで完結して良いんだけど、標準出力が超最低限なのと、1クラスずつしか動かせないのがネック。
他の書き方もありそうな気はしてる。
個人的には、少し環境構築が必要だけど、方法1の方が使いやすいと思っている。
逆に、環境を汚さずにできるって意味では方法2もアリかなと。
ちなみに、 org.junit.platform.console.ConsoleLauncher
クラスを使って動かそうとしたのは失敗した。
ちょっとよく分からないExceptionが出てお手上げ…。