Kent Beck氏が「テストの合成」でテストスイートの冗長性を排除する方法
Kent Beck: Composable Tests

Kent Beck氏は、テストの望ましい性質の一つである「合成」について、孤立性とは異なる概念として解説します。孤立したテストを単純に組み合わせるだけでは冗長になることがあり、彼は具体例を用いて、テストを合成することで予測可能性と特異性を保ちつつ、テストの数を減らし、読みやすく、変更しやすくする方法を示します。このアプローチは、テストを全体として捉え、複数の価値ある特性を向上させることを目指しています。
「合成はテストを悪くすることではありません。合成とは、テストを全体として見て、テストのいくつかの価値ある特性によって判断される全体をより良くしようとすることです。」
HNでの議論
62- pfdietz
数千のテストからなるテストスイートを持っていたことがある。その実行方法の一つは、すべての合格テストを取得し、ランダムな順序で繰り返し実行することだった。これにより、意図しない永続状態に関する新しいバグが見つかった。
- akoboldfrying
ケントや一般的な見解に反対だが、test1を単に削除するのが、はるかにシンプルで明確で最善の方法だと思う。テストフレームワークがどのアサーションが失敗したかを教えてくれるなら(例えば、スタックトレースの行番号で)、問題がどこにあるかは正確にわかる。失うのは、テスト関数やメソッドが複数の関連チェック(「セットアップ依存」で関連している)をカバーするかもしれないことで、名前を少し広くする必要があるかもしれない。しかし、各assert()チェックの具体的な意味を、必要なら事前に1行のコメントで説明することもできる。メソッド名に詰め込む必要はない。
追記: テストの「準備」ステップができるだけシンプルになるように書くことを好む。不要な重複を最小限にするためだ。しかし、テストの準備ステップとして最もシンプルなものが、それ自体が正しさをチェックする必要があるものであるなら、そのチェックをその場で、他では行わない。それ以上は、何も役に立たない儀式だ。
- solarengineer
ケント・ベックがグローバル変数や静的変数について聞いたことがあるかどうかというコメントを誰かが書いていた。そのコメントは削除されたようだ。
ケント・ベックはJUnitテストフレームワークの共同作成者であり[1]、静的変数やグローバル変数について間違いなく知っている。
- nhgiang
ああ、ケント・ベック、あなたの些細な例を書くスタイルは変わっていないようだね。
- grim_io
賢い人たちが私の愚かなコードに対する修正案を提案するのを聞くのはもうたくさんだ。
私がそれをうまく機能させるだけの賢さや規律を持っていないか、同僚が持っていないかのどちらかだ。おそらく両方だ。