LoginSignup
1
1

More than 5 years have passed since last update.

Groovyで気軽にJUnit 5を試すサンプルと実行方法2つ

Posted at

最近、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が出てお手上げ…。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1