1️⃣

[読書メモ]オブジェクト設計スタイルガイド 1章10節 with TypeScript

2024/01/31に公開

初めに

オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
https://www.oreilly.co.jp/books/9784814400331/

1.10 ユニットテスト

テストメソッドの構造

  • Arrange
  • Act
  • Assert
export class Mutable {
  constructor(private _count: number) {}

  public add() {
    this._count++;
  }

  get count() {
    return this._count;
  }
}

テスト

test("Mutable add", () => {
  // Arrange
  const mu = new Mutable(0);

  //Act
  mu.add();

  // Assert
  expect(mu.count).toBe(1);
});

テストダブル

mockやスタブと呼ばれる代替オブジェクトで置換することがある。

interface Mailer {
  send(): void;
}

class SendMail {
  mailer: Mailer;

  constructor(mailer: Mailer) {
    this.mailer = mailer;
  }
}

テスト

// TypeScript + Jestだと具体を用意していなくてもモックできる
const mockActualMail: jest.Mocked<Mailer> = {
  send: jest.fn(),
};

test("mock", () => {
  // Arrange
  const m = new SendMail(mockActualMail);

  // Act
  m.mailer.send();

  // Assert
  // ActualMailのsendメソッドが呼び出されたことを確認
  expect(mockActualMail.send).toHaveBeenCalledTimes(1);
});

1.11 動的配列

特になし(本の中では配列は動的配列として扱うよというだけ)

1.12 まとめ

Discussion