自動テストの基本的な考え方
自動テストはテストを成功させることが目的ではありません。
自動テストを、私たちのアプリケーションの健康状態をチェックする「精密な健康診断ツール」だと考えてみてください。
もし、この健康診断ツールが、どんなに体調が悪くても常に「健康です(テスト成功)」という結果しか出さなかったとしたら、そのツールに意味はあるでしょうか?私たちが知りたいのは、本当に健康なのか、それともどこかに問題があるのか、という真実です。
テストコードも全く同じです。
例えば、ボタンが表示されるのに10秒もかかってしまい、ユーザーにとっては非常に不便な状態だったとします。しかし、テストを成功させるために「ボタンを押す前に30秒間待つ」という設定を追加すれば、このテストは簡単に「成功」してしまいます。
これでは、ユーザーが感じる不便さや、パフォーマンスの悪化という「問題」を見過ごすことになり、ユーザーの実際の体験とはかけ離れた「意味のないテスト」になってしまいます。
テストを成功させるために、あまりにもユーザーの挙動からかけ離れたプログラミングを書くのはNGです。
(とはいえそこはパフォーマンステストで補えばいいだろ。という気持ちもわかります。)