テストメモ

テスト

what: バグ(要件と成果物との差異)を見つける作業。

  • テストしてても安心はできない。
    • 全数テストは不可能なので、バグがないことを証明できない。

why: 品質向上のため。

how(理論)

分類

動的/静的

  • 静的: プログラムを動かさない
    • 静的コード解析
    • コードレビュー
    • ウォークスルー
    • インスペクション
  • 動的: プログラムを動かす
    • 目視での動作確認
    • テストコードによる確認

手動/自動

機能/性能

  • 機能試験: 規定した機能を果たすかどうかのテスト
  • 性能試験: 必要な性能が出ることを確かめるテスト

ブラックボックス/ホワイトボックス

規模

ユニットテスト(UT):
  • [例]ビューUT
  • [例]ロジックUT
結合テスト(IT)
  • 未調査
E2Eテスト(E2ET)
  • 未調査

how(実践)

自動ユニットテスト

  • 対象: 一般的なwebapp
    • typescript
    • react
  • テストフレームワーク: jest, ts-jest
  • 環境設定方法: 省略
  • 基本
テストケース名('テストケースの説明', () => {
    //expect(式)がexpectationオブジェクトを返し、expectationオブジェクトのmatcher関数を呼び出すことで成否が判定され、判定結果がjestにより記録される。
    expect(式).toBe(式);
});
  • 各種アサーション
    • 値の等価: expect(式).toBe(式)
    • オブジェクトの等価: expect(式).toEqual(式)
    • null: expect(式).toBeNull()
    • undefined: expect(式).toBeUndefined()
    • if文がtrueになる: expect(式).toBeTruthy()
    • if文がfalseになる: expect(式).toBeFalsy()
    • より大きい: expect(式).toBeGreaterThan(式)
    • 浮動小数点数の一致: expect(式).toBeCloseTo(式)
    • 文字列の一致: expect(式).toMatch(正規表現の文字列);
    • 配列に含まれる: expect(式).toContain(式);
    • 例外: expect(例外を投げる関数).toThrow(文字列|エラー型);
  • 非同期コードのテスト
    • await, thenを使って直観的にできる。
  • セットアップ
    • beforeEach/afterEach/beforeAll/afterAllが使える。
  • スコープ
    • describe(名前, ブロック)でテスト関数にスコープを与えることができる。
    • beforeEach等のセットアップをスコープ外・スコープ内で行った場合は上書き定義ではなく、上位のスコープのそれら・下位のスコープのそれらが順番に実行されるので注意

参考資料