TypeScript中級

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

導入

テスト駆動開発(TDD)は、ソフトウェア開発のプロセスにおいて、テストを先に書くことでコードの品質を高める手法です。特に中級エンジニアにとって、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;
    }
}

// テスト
describe('Calculator', () => {
    let calculator: Calculator;

    beforeEach(() => {
        calculator = new Calculator();
    });

    it('should add two numbers correctly', () => {
        expect(calculator.add(2, 3)).toBe(5);
    });

    it('should subtract two numbers correctly', () => {
        expect(calculator.subtract(5, 2)).toBe(3);
    });
});

コードの行ごとの解説

  1. class Calculator { – Calculatorクラスを定義し、基本的な計算機能を提供します。
  2. add(a: number, b: number): number { – 2つの数値を受け取り、その合計を返すメソッドです。
  3. subtract(a: number, b: number): number { – 2つの数値を受け取り、その差を返すメソッドです。
  4. describe(‘Calculator’, () => { – テストスイートを定義し、Calculatorクラスのテストをまとめます。
  5. beforeEach(() => { – 各テストの前に新しいCalculatorインスタンスを作成します。
  6. it(‘should add two numbers correctly’, () => { – addメソッドが正しく動作するかを検証するテストケースです。
  7. expect(calculator.add(2, 3)).toBe(5); – 期待される結果と実際の結果を比較します。
  8. it(‘should subtract two numbers correctly’, () => { – subtractメソッドが正しく動作するかを検証するテストケースです。
  9. expect(calculator.subtract(5, 2)).toBe(3); – 期待される結果と実際の結果を比較します。

練習問題編

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

  1. 問題1: 乗算メソッドをCalculatorクラスに追加し、テストを作成してください。
  2. 問題2: 割り算メソッドをCalculatorクラスに追加し、0で割った場合のエラーハンドリングを含めたテストを作成してください。
  3. 問題3: Calculatorクラスに履歴機能を追加し、過去の計算結果を取得するメソッドを実装し、そのテストを作成してください。

模範解答と解説

問題1の模範解答は、addメソッドと同様にmultiplyメソッドを追加し、適切なテストを作成することです。問題2では、divideメソッドを追加し、0で割った場合に例外をスローするテストを作成します。問題3では、計算結果を配列で保持し、履歴を取得するメソッドを実装します。

まとめ

  • TDDはソフトウェアの品質を高める手法であり、実務において役立つスキルです。
  • テストを先に書くことで、コードの設計が改善されることがあります。
  • 練習問題を通じて、TDDの実践的な理解を深めることができます。