本文へスキップ
BecomeCoder

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

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

ブラウザで完結

導入

このコース全体は「先にテストを書き、それを通す実装をし、整える」というTDDテスト駆動開発)で進みます。C#デザインパターンコースのTDD章で学んだRed→Green→Refactor(失敗するテストを書く→通す最小実装→整える)のリズムを、短い題材で軽く思い出しておきましょう。

図解

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

サンプル

// Red: 先に「期待する結果」をテストとして書く(この時点ではIsPositiveが無く失敗する)
Assert(IsPositive(5) == true,   "5は正の数");
Assert(IsPositive(-2) == false, "-2は正の数ではない");
Console.WriteLine("全テスト成功");

// Green: テストを通す最小限の実装
bool IsPositive(int n) => n > 0;

void Assert(bool condition, string name)
{
    if (!condition) throw new Exception($"FAIL: {name}");
}
  • 先に「期待する結果」をテストとして書く(実装が無いので失敗=Red)
  • テストを通す最小限の実装を書く(Green)
  • 動作を保ったままコードを整理する(Refactor)。今回のように短い題材ではRefactorの余地は小さい

演習

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

Assert(IsShortEnough("牛乳を買う") == true, "短いタイトルはOK");
Assert(IsShortEnough(new string('a', 50)) == true, "ちょうど50文字はOK");
Assert(IsShortEnough(new string('a', 51)) == false, "51文字はNG");
Console.WriteLine("全テスト成功");

// TODO: 文字列の長さが50文字以内かどうかを判定する IsShortEnough を実装してください
void Assert(bool condition, string name)
{
    if (!condition) throw new Exception($"FAIL: {name}");
}
___
  • 期待される出力: 全テスト成功
ヒント1を見る

bool IsShortEnough(string s) => s.Length <= 50;

ヒント2を見る

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

まとめ

  • TDDは実装より先にテストを書く。Red→Green→Refactorのリズム
  • 「正しく動く証拠」をテストとして積み上げながら進める
  • このコースでは、Entity・ValueObject・Factory・Service・ViewModelのほぼ全てをこのリズムで作る

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

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。