Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit f35024f

Browse files
committed
refactoring
1 parent f3fb61d commit f35024f

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

books/refactoring.md

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -618,25 +618,28 @@ const main = () => {
618618
- TDD のメリット
619619
- すべきことは何かを事前に整理せざるを得ない
620620
- 実装よりもインターフェースに集中せざるを得ない
621-
- コーディングの完了時点が明白
621+
- コーディングの完了時点が明白(テストに通過したとき)
622622
- フィクスチャ
623623
- テストに必要となるデータやオブジェクトのこと
624-
- `test`文に与える説明文は、失敗したときにどのテストか識別できる程度に書くとよい。
624+
- `test`関数に与える説明文の粒度
625+
- 失敗したときにどのテストか識別できる程度に書くとよい
625626
- 説明しすぎは冗長なコメントのようなもの
626627
- どこに、どれくらいテストを書くべきか
627628
- 全てのコードにテストを書こうと思わないこと
628629
- 以下を集中的にテストすること
629-
- 一番怪しいと思うところ
630+
- 怪しいと思うところ
630631
- 複雑なところ
631632
- エラーが起こりそうなところ
632-
- 例えばセッターをテストするなどは明らかに無意味
633-
- fixture をテスト間で共有するな。大変なトラブルのもとになるから。
633+
- 無意味なテストをするな(例えば単なるセッターのテスト)
634+
- fixture をテスト間で共有するな
635+
- 大変なトラブルのもとになる
636+
- `beforeEach()`を使って分離せよ
634637

635638
```ts
636639
// Bad
637640
describe('', () => {
638641
const asia = new Province();
639-
// many test cases goes here..
642+
// many test cases go here..
640643
});
641644

642645
// Good
@@ -645,37 +648,44 @@ describe('', () => {
645648
beforeEach('', () => {
646649
const asia = new Province();
647650
});
648-
// many test cases goes here..
651+
// many test cases go here..
649652
});
650653
```
651654

652-
- fixture を共通した方法でセットアップし、テスト文で少し改変したうえで検証するのは、よくあるやり方
653-
- いろんな呼び名がついている
655+
- テストの構成
656+
- よくあるのは以下のパターン
657+
- 1. fixture を共通した方法でセットアップし
658+
- 2. テスト文で少し改変したうえで
659+
- 3. 検証する
660+
- これには色々な呼び名がついている
654661
- Set up - Exercise - Verify
655662
- Given - When - Then
656663
- Arrange - Act - Assert
657664
- Tear down というフェーズもあるがこれを使うのはレアケース
658665
- e.g. 生成にあまりに時間がかかるため、テスト間で共有せざるを得ない fixture を扱っている場合など
659666
- 境界値の検査
660-
- 通常のケースは「ハッピーパス」という
661-
- 境界値の例
667+
- 当たり前のケースのテストは「ハッピーパス」という
668+
- 通常想定されないケースや境界値でのテストも大事。境界値とは:
662669
- 集合なら空の時
663670
- 数値なら 0 や負の値の時
664671
- 文字列なら空文字の時
665-
- 想定し得ない値を与えたケースでランタイムエラー(e.g. `*** is not a function`など)が出たときの選択肢
672+
- 通常想定されないケースでランタイムエラー(e.g. `*** is not a function`など)が出たときの選択肢
666673
- より適切なエラーを返す
667674
- ログを書いてから親切に値を初期化する
668675
- 何もしない
669676
- モジュール間でたくさんのチェックを設けると冗長化して逆にトラブルのもとになることもある
670677
- 外からくる信頼できない値に対してはちゃんとチェックは必要だけどね
671-
- アサーションのテストは書かない。アサーション自体がテストだから。
672-
- ある程度テストを書いたら、あとは作業の進度に合わせてテストを追加してもよい
678+
- アサーションのテスト
679+
- 書かない。アサーション自体がテストだから。
680+
- リファクタを始めるときにどれくらいテストを書くか
681+
- ある程度テストを書く
682+
- あとは作業の進度に合わせてテストを追加する
673683
- バグレポートを受け取ったら、まず、そのバグの存在を明確に示す単体テストを書くことから始めよ
674684
- カバレージによる分析
675685
- コードの中のまだテストされていない箇所を突き止めるために使う
676686
- テスト自体の品質を保証するもの**ではない**
677687
- テストの品質は品質は主観で決めるのが良い
678-
- 誰かが変な変更をしたときにテストは失敗すると確信がもてるか?
688+
- 誰かが変な変更をしたときにテストは失敗すると確信がもてるか?という視点が大事
679689
- テストの書きすぎ
680690
- テストコード自体の修正に時間がかかり開発が遅れているなら、書き過ぎの兆候かも
681691
- ただしテスト過多になるケースはほとんどない

0 commit comments

Comments
 (0)