本文へスキップ
BecomeCoder

Java MVVMコース · 第1章 MVVMとこのコースの進め方 · レッスン1

TDDの回し方をおさらいする ― Red-Green-Refactor

ブラウザで完結

導入

このコース全体は「先にテストを書き、それを通す実装をし、整える」というTDDテスト駆動開発)で進みます。まずは短い題材で、Red→Green→Refactor(失敗するテストを書く→通す最小実装→整える)のリズムを思い出しておきましょう。JavaのテストはJUnit5、@Test を付けたメソッドが1件のテストになります。

図解

flowchart LR
    R["Red<br/>失敗するテストを書く"] --> G["Green<br/>通す最小実装"]
    G --> RF["Refactor<br/>コードを整える"]
    RF --> R
    style R fill:#ffebee
    style G fill:#e8f5e9

説明

JUnit 5 のテストは、次の3点だけ覚えれば読み書きできます。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class SampleTest {
    @Test
    void tashizanGaTadashii() {
        assertEquals(5, 2 + 3);          // 期待値, 実際の値
        assertTrue(2 < 3, "2は3より小さい"); // 条件, 失敗時のメッセージ
    }
}
  • @Test を付けたメソッドが1件のテスト。public でなくてよい(パッケージプライベートが慣習)
  • assertEquals(期待値, 実際の値)期待値が先。順番を逆にすると失敗メッセージが逆さまになる
  • import static org.junit.jupiter.api.Assertions.*; と書くと Assertions. を省いて呼べる

やってみよう

下のエディタには TitleRules.java(実装)と TitleRulesTest.java(テスト)の2つのタブがあります。まず何も書かずに「▶ 実行」を押してみてください。テストが赤(❌)になるのがRedの状態です。

演習

タスクのタイトルには「50文字以内」というルールを、後の章(Entity・値オブジェクト)で実装します。ここでは先取りして、文字数チェックのテストを通してください。TitleRules.javaTODO を埋めます。

public class TitleRules {
    // TODO: 文字列の長さが50文字以内なら true を返す isShortEnough を実装してください
    //       (static メソッドにします)
}
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class TitleRulesTest {
    @Test
    void mijikaiTitleHaOk() {
        assertTrue(TitleRules.isShortEnough("牛乳を買う"), "短いタイトルはOK");
    }

    @Test
    void chodoGojuMojiHaOk() {
        assertTrue(TitleRules.isShortEnough("a".repeat(50)), "ちょうど50文字はOK");
    }

    @Test
    void gojuIchiMojiHaNg() {
        assertFalse(TitleRules.isShortEnough("a".repeat(51)), "51文字はNG");
    }
}
  • 期待される結果: 3件のテストがすべて成功
ヒント1を見る

public static boolean isShortEnough(String s) { return s.length() <= 50; }

ヒント2を見る

文字数は .length() で取れます。「50文字以内」なので比較演算子<= です

まとめ

  • TDDは実装より先にテストを書く。Red→Green→Refactorのリズム
  • JUnit 5 は @TestassertEquals / assertTrue / assertFalse がわかれば読み書きできる
  • このコースでは、Entity・値オブジェクト・Factory・Service・ViewModelのほぼ全てをこのリズムで作る

次回: このコースの設計思想「MVVM」とは何かを見ていきます。

実際に動かしてみよう

このレッスンのサンプルは、実務と同じように役割ごとの .java ファイルへ分けてあります。下のエディタは最初からその複数ファイルが入った状態で、上のタブでファイルを切り替えられます。そのまま「▶ 実行」を押せば全ファイルをまとめて解釈して動かせます。@Test の付いたテストがあるレッスンでは、テストメソッドごとに ✅/❌ の一覧(Red/Green)が出るので、まずテストを赤くしてから実装で緑にする、というTDDの回し方をその場で体験できます(本物のJVMではなく、JUnit・Mockitoの主要な書き方まで再現した学習用シミュレータです)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。