到達点は、必要なライブラリとテスト手順をプロジェクトに記録することです。前提は第08回です。
手作業を再現可能にする
ファイルが増えたら、ビルド手順を人の記憶へ置かずMavenへ渡します。Mavenはpom.xmlに依存関係やプラグインを記録し、決まったディレクトリからソースをコンパイルします。本実習はJDK 21とMaven 3.9系を前提とし、依存は教材用の固定版です。
新しいフォルダに次のpom.xmlを保存します。
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>study</groupId><artifactId>practice</artifactId><version>1.0.0</version>
<properties>
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId>
<version>5.11.4</version><scope>test</scope>
</dependency>
</dependencies>
<build><plugins>
<plugin><groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version></plugin>
<plugin><groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId><version>3.5.2</version></plugin>
</plugins></build>
</project>
src/main/java/study/Fees.java を作ります。packageはクラスの名前空間で、ここではフォルダ構成と合わせます。
package study;
public final class Fees {
public static int shipping(int amount) {
if (amount < 0) throw new IllegalArgumentException("negative amount");
return amount >= 5000 ? 0 : 500;
}
}
src/test/java/study/FeesTest.java にテストを書きます。
package study;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class FeesTest {
@Test void shippingBoundary() {
assertEquals(500, Fees.shipping(4999));
assertEquals(0, Fees.shipping(5000));
}
@Test void rejectsNegative() {
assertThrows(IllegalArgumentException.class, () -> Fees.shipping(-1));
}
}
pom.xmlのある場所で mvn test を実行すると、二つのテストが成功します。初回はインターネットから依存を取得します。mvn package は検証を含むビルドの後、成果物をtargetへ作ります。
テストは振る舞いの契約
準備、操作、検証を分けます。実装と同じ計算式で期待値を作ると、同じ間違いを二度書くだけになることがあります。境界の4999と5000、不正な負数のように、仕様から例を選びます。テストの数より、壊れやすい契約を守れるかが大切です。
練習と解答
練習:条件を意図的に amount > 5000 に変更してください。
解答:5000円のテストが失敗すれば、境界の誤りを検知できています。元へ戻して成功を確認します。テストが一度失敗するところまで確認すると、未実行のテストを成功と誤認しにくくなります。
公式資料
Maven入門とJUnit 5ガイドを参照できます。
Java全20回の目次 | 前の回 | 次の回