開発者からの優れたユニットテストがないことの主な言い訳は、「コードはユニットテスト可能な方法で設計されていない」です。ユニットテストできないデザインとコードの種類を理解しようとしています。
開発者からの優れたユニットテストがないことの主な言い訳は、「コードはユニットテスト可能な方法で設計されていない」です。ユニットテストできないデザインとコードの種類を理解しようとしています。
回答:
いくつかの要因により、コードの単体テストが困難になる場合があります。この場合、リファクタリングは、コードをテスト可能にするためにコードを改善するのに役立ちます。
おそらくテストが難しいコードの例:
function pGetDp_U(int i, int i2, string sText)
。ユニットテストはコードの小さな部分に関するものであるため、明確なアーキテクチャがなくてもコードをユニットテストすることは難しくありません。不明瞭なアーキテクチャは、統合およびシステムテストに依然として悪影響を及ぼします。
コードの単体テストを困難にする多くのことがあります。偶然にも、これらの多くは、コードの保守を困難にします。
人々が単体テストを望まないコードの一般的な例:
モックフレームワークを使用すると、これらの例はすべてユニットテストできます。内部依存関係の模擬置換をセットアップするだけです。
本当にユニットテストできないもの:
ユニットテストの作成がより困難になる可能性があるいくつかの領域があります。ただし、テストが複雑になる可能性があるため、便利なテクニックを手に負えないという意味ではないことを強調します。他のコーディングと同様に、利益がコストを上回るかどうかを判断するために独自の分析を行う必要があり、ランダムな男がネットに投稿したものを盲目的に受け入れないでください。
これらのほとんどのコストは、自分が何をしているのかわからない限り制御不能です。残念ながら、多くの場合、テストの複雑さなどを軽減する方法でこれらの手法を使用する方法を知りません。
テストできないコードなどはありません。ただし、実際にはテストするのが非常に難しいコードの例がいくつかあります(おそらく努力する価値がないという点まで)。
ハードウェアの相互作用-コードがハードウェアを直接操作する(たとえば、物理デバイスを移動するためにレジスタに書き込む)場合、ユニットテストは非常に困難または高価になる可能性があります。テストに実際のハードウェアを使用すると、高価になって適切なフィードバックをテストハーネスに取得できます(さらに多くの機器があります!)、そうでない場合は、物理オブジェクトの正確な動作をエミュレートする必要があります。いくつかのインスタンス。
クロックの相互作用-通常、システムクロック機能を非常に簡単にモックアウトできるため、これは簡単です。しかし、できない場合、これらのテストは管理不能になります-リアルタイムに基づくテストは実行に時間がかかる傾向があり、私の経験では、システムの負荷が物事を必要以上に長くするため、非常に脆くなる傾向があります、ファントムテストの失敗の原因。
私の主な3つのグループは次のとおりです。
外部サービスに依存するコード
テスターがアプリケーションとは無関係に状態を変更できないシステム。
実稼働セットアップを複製しないテスト環境。
これは、開発者としてQAエンジニアになったときに最も経験したことです。