アンチパターンテスト駆動開発

有能な開発者として、あなたがユニットテストについてのアイデアを持ち、テストを書くときに避けるべきことについてのいくつかの精神的なメモを自分自身にすることを願っています。 会う:



うそつき(うそつき)


すべてのケースを正常に完了し、正常に動作するように見える単体テストですが、綿密な検査を行うと、実際に何をすべきかをテストしないことがわかります。



過剰なセットアップ


実際のテストを開始する前に初期化に苦労するテスト。 多くのオブジェクトを作成しているときに、1回のテストで何百行が呼び出されるかを確認することがあります。 この「ノイズ」のため、テスト対象を正確に確認することは困難です。



ジャイアント


ユニットテストは、アプリケーションを正しくテストしますが、数千行のコードに広がり、ケースが多すぎます。 これは、テスト対象のシステムが全能オブジェクト(神オブジェクト)のアンチパターンであることを示している可能性があります。



偽物(The Mockery)


モッキングは非常に便利で正しい場合があります。 しかし、開発者は、原則としてテストに参加する必要があるシステムの部分に対しても、感覚を失い、それを使用することがあります。 この場合、単体テストには非常に多くのモック、スタブ、および偽物が含まれているため、システムの一部はテストされません。



検査官


100%のコードカバレッジを達成しようとしてカプセル化を破り、テスト対象のシステムについてあまりにも多くを知っている単体テスト。 システムをリファクタリングするとき、そのようなテストは頻繁に中断され、修正する必要があります。



寛大な残り物


ある単体テストがどこかに保存されたデータを作成し、別のテストがそれを再利用する場合。 何らかの理由で「データジェネレータ」が後で呼び出されるかスキップされると、そのデータを使用したテストは失敗します。



地元のヒーロー


特定の環境に固有の何かに依存するテスト。 その結果、テストは特定の開発者で成功しますが、他の開発者では実行されません。



クラホバー(ニトピッカー)


単体テスト。作業の結果全体をチェックしますが、実際にはその小さな部分だけが重要です。 そのため、マイナーな変更を反映するためにテストを頻繁に更新する必要があります。 Webアプリケーションのテストに一般的。



秘密のキャッチャー


アサーションがないため一見したところテストを行わないが、実際にシステムの文字列をプルし、問題が発生した場合に何らかの例外をスローすることに依存するテスト。 テスト環境では、このエラーをキャッチし、テストを失敗として表示することが期待されています。



ドジャー


ユニットテスト。多くのマイナーな(通常は単純な)雑学をテストしますが、主な動作はテストしません。



スクリーマー(ラウドマス)


ユニットテスト。テストが成功した場合でも、多くの診断メッセージ、ログ、その他の情報でコンソールを詰まらせます。 テストのデバッグ後に削除されなかった不要なコードの結果である場合があります。



貪欲なキャッチャー


例外をキャッチして、それらを「飲み込む」テスト。情報をあまり意味のないメッセージに置き換えるか、単にコンソールにエラーを表示して、テストを正常に完了させます。



シーケンサー


事実上無秩序なデータが常に同じ順序で現れるという事実に依存するテスト。



非表示の依存関係


ローカルヒーローの近親者。 これは、開始する前にいくつかのデータを入力する必要がある単体テストです。 このデータが利用できない場合、テストはクラッシュし、問題の原因に関する情報をほとんど残さず、開発者にコードの山を掘り下げて、どのデータとどこからデータを取得するかを決定させます。



カウンター(列挙子)


すべてのケースに不適切な名前が付けられている単体テスト(たとえば、test1、test2、test3)。 結果として、テストケースの目的は不明であり、何が壊れているかを理解する唯一の方法は、テストコードに進み、それが明確であることを祈ることです。



ストレンジャー


配置されている単体テストに適用されないケース。 実際には、まったく異なるオブジェクト、ほとんどの場合、メインのテストオブジェクトによって使用されるオブジェクトをテストします。 Far Cousinとも呼ばれます。



Adherent OS(オペレーティングシステムエバンジェリスト)


ユニットテスト。特定のオペレーティングシステムの機能に依存します。 良い例は、Windowsで採用されたラインフィードがLinuxで実行されたときに破損することを期待するテストです。



すべてのオッズに対する成功


最初に失敗するためではなく、成功するために書かれたテスト(最初に失敗する原則)。 副作用としては、十分に詳細なテストが行​​われず、正しいテストが該当する場所に合格します。



The Hare(フリーライド)


新しいケースメソッドを記述する代わりに、新しいアサートが既存のケースに追加されるだけです。



選ばれし者(The One)


いくつかのアンチパターンの組み合わせ、特にノウサギとジャイアント。 このような単体テストは、オブジェクトの機能全体をテストする単一のメソッドで構成されています。 問題の典型的な指標は、単体テストの名前と多数の初期化行とassertによるテストメソッドの名前です。



のぞきトム


共有リソースにより、他のテストからのデータを見ることができ、テスト対象のシステムが完全に有効であってもクラッシュする可能性のあるテスト。 典型的な例は、コレクションを格納するための静的フィールドの使用です。 適切にクリーニングされない場合、他のテストで予期しない副作用が発生する可能性があります。 侵入防止アンチパターンとしても知られています。



ブレーキ(スローポーク)


非常に低速で実行される単体テスト。 開発者がそれを起動すると、彼はトイレに行くか喫煙するのに十分な時間を持っています。 または、さらに悪いことに、彼はテストが完了するのを待たずに夕方にコミットして帰宅します。



翻訳者から:賢い考えへの賞賛-著者へ、翻訳へのキック-私へ。 :)




All Articles