導入
このコース全体は「先にテストを書き、それを通す実装をし、整える」という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」とは何かを見ていきます。