テストメモ
テスト
what: バグ(要件と成果物との差異)を見つける作業。
- テストしてても安心はできない。
- 全数テストは不可能なので、バグがないことを証明できない。
why: 品質向上のため。
how(理論)
分類
動的/静的
- 静的: プログラムを動かさない
- 静的コード解析
- コードレビュー
- ウォークスルー
- インスペクション
- 動的: プログラムを動かす
- 目視での動作確認
- テストコードによる確認
手動/自動
機能/性能
- 機能試験: 規定した機能を果たすかどうかのテスト
- 性能試験: 必要な性能が出ることを確かめるテスト
ブラックボックス/ホワイトボックス
- ホワイトボックステスト: プログラムの内部構造を考慮したテスト。
- 評価指標
- 命令網羅(C0): ステートメント
- 分岐網羅(C1): 選択の網羅
- 条件網羅(C2): 選択列の網羅
- 評価指標
- ブラックボックステスト: プログラムの内部構造を考慮せず、入出力のみに着目したテスト。
規模
ユニットテスト(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等のセットアップをスコープ外・スコープ内で行った場合は上書き定義ではなく、上位のスコープのそれら・下位のスコープのそれらが順番に実行されるので注意