TypeScript上級

上級 TypeScriptで学ぶテスト駆動開発|練習問題編

導入

テスト駆動開発(TDD)は、ソフトウェア開発においてコードの品質を確保するための強力な手法です。特にTypeScriptを使用することで、型安全性を活かしながら、より堅牢なテストを実現できます。本記事では、実際の業務で遭遇するシチュエーションを基に、TDDの実践方法を深掘りします。

教科書レベルの解説(テスト駆動開発)

重要な概念の整理

TDDは、まずテストを書くことから始まります。このアプローチは、開発者が要求仕様を明確に理解し、実装の前に期待される結果を定義することを促します。具体的には、次のステップを繰り返します:

  • テストを書く
  • テストを実行し、失敗させる
  • 実装を行い、テストを通過させる
  • リファクタリングを行う

このプロセスを通じて、開発者はコードの品質を維持しつつ、機能の追加や変更を行うことができます。

コード例(TypeScript)


class Calculator {
    add(a: number, b: number): number {
        return a + b;
    }
    
    subtract(a: number, b: number): number {
        return a - b;
    }
    
    multiply(a: number, b: number): number {
        return a * b;
    }
    
    divide(a: number, b: number): number {
        if (b === 0) throw new Error("Division by zero");
        return a / b;
    }
}

コードの行ごとの解説

  1. class Calculator: 計算機能を提供するクラスを定義します。
  2. add: 二つの数値を加算するメソッドです。テストでは、正しい結果が返されることを確認します。
  3. subtract: 二つの数値を減算するメソッドです。加算と同様に、期待される結果をテストします。
  4. multiply: 二つの数値を乗算するメソッドです。このメソッドも、正しい動作を確認するためにテストが必要です。
  5. divide: 二つの数値を除算するメソッドです。ゼロでの除算を防ぐために、エラーハンドリングを行っています。テストでは、ゼロで割った場合に例外がスローされるかを確認します。

練習問題編

以下の練習問題に取り組み、TDDの理解を深めてください。

  1. 問題1: Calculatorクラスに、べき乗を計算するメソッドを追加し、そのテストを作成してください。

    
    power(a: number, b: number): number {
        return Math.pow(a, b);
    }
    
  2. 問題2: divideメソッドにおいて、ゼロで割った際のエラーメッセージをカスタマイズしてください。

    
    if (b === 0) throw new Error("Cannot divide by zero.");
    
  3. 問題3: Calculatorクラスに、全てのメソッドのテストケースを作成し、各メソッドの動作を確認するテストを実装してください。

    
    // テストフレームワークを使用して、各メソッドのテストを記述
    

まとめ

  • テスト駆動開発は、コードの品質を向上させるための有効な手法です。
  • TypeScriptの型安全性を活かし、テストを書くことから始めることで、バグの早期発見が可能です。
  • 練習問題を通じて、実際の業務に役立つスキルを磨いてください。