| SU | MO | TU | WE | TH | FR | SA |
|---|---|---|---|---|---|---|
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
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みたいな標準化されてもいい気がするけど、なんでないんだろう?