Kent Beckの「テスト駆動開発」を実践するために、Eclipse使わずコマンドラインで動かす方法を調べた。
Kent Beck テスト駆動開発を読みながら、実際にTDDのコーディングやろうと思って、ユニットテスト環境を設定した。
JavaにおけるMakefile
にあたるシステム。Makefile
→Ant
→Maven
→Gradle
という順番で生まれている。Ant
はEclipse
で見たことあるし、Gradle
はAndroid Studio
で見たことあったが、何の役割なのかは気にしてなかった。
Gradle公式からバイナリを落としてくるか、Chocolatey
を使って$ choco install gradle
でインストールする。$ gradle --version
で動作確認。
$ gradle init
で以下が生成される。
(project root)
|
+-- build.gradle
+-- .gitattributes
+-- .gitignore
+-- gradle
| `-- wrapper
+-- .gradle
+-- gradlew
+-- gradlew.bat
`-- settings.gradle
ソースコードとテストコードはプロジェクトルートの下にsrc
を作って以下のように配置する。
`-- src
+-- main
| `-- java
| `-- (project name)
| `-- code.java
`-- test
`-- java
`-- (project name)
`-- test.java
project name
はsettings.gradle
のrootProject.name
に従う
ドットがあれば逆順にディレクトリ階層作る。
ここを参考にbuild.gradle
を設定。dependencies
にtestImplementation 'org.junit.jupiter:junit-jupiter:5.x.x'
を設定する。
test
にuseJUnitPratform()
を追加するの2点がキモだと思われる。
JUnitには4系と5系の情報がネットにあるが、Kent Beck テスト駆動開発のコードは5系のようなのでJUnit5を使う。
JUnit User Guideから引用。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import example.util.Calculator;
class MyFirstJUnitJupiterTests {
private final Calculator calculator = new Calculator();
@Test
void addition() {
assertEquals(2, calculator.add(1, 1));
}
}
JUnit5で使う依存関係は以下のような意味。
import org.junit.jupiter.api.Test;
:@Test
を使えるようにしてくれるimport static org.junit.jupiter.api.Assertions.assertEquals;
:アサーション関数gradle build
でビルド実行。
gradle test
でテスト実行(必要であればビルドもされる)。
とりあえずこれで、Emacsのshellから$ gradle test
実行してユニットテスト実行できるようになった。
しかし、保存時自動でテスト走らせたり、テストケースのレッドグリーンバーのEmacsフロントエンドが欲しい。
一応test-case-modeというのがあってmelpaにも登録されているが、うまく動かない。
コードみてもmeven前提っぽいけど、そもそもModeを有効にできないし、エラーメッセージも出ない。
emacs-tddはエラーのありなし、件数だけで、テストケース一覧とかは提供してくれないっぽい。
fly-checkみたいな標準化されてもいい気がするけど、なんでないんだろう?