2

私が作成した .net c# ライブラリがあり、現在いくつかの単体テストを作成しています。現在、作成したキャッシュ プロバイダー クラスの単体テストを作成しています。ユニットテストを書くのは初めてなので、2つの質問があります。これらは次のとおりです。

  1. 私のキャッシュ プロバイダー クラスは、分散キャッシュ (AppFabric) への抽象化レイヤーです。したがって、appfabric キャッシュへの追加、キャッシュからの削除など、私のキャッシュ プロバイダー クラスの側面をテストするには、appfabric との通信が必要です。したがって、そのようなテストをテストするテストは、単体テストまたは統合テストとして分類されますか?

  2. appfabric とのやり取りのためにテストしている上記のメソッドは、そのようなメソッドの時間を測定したいと思います。指定されたベンチマークよりも時間がかかる場合、テストは失敗しています。もう一度質問します。このパフォーマンス ベンチマーク テストは単体テストとして分類できますか?

テストをセットアップする方法として、すべての単体テスト、統合テストなどをまとめたいと考えています。

4

2 に答える 2

2
  1. コードを分離してテストするのではなく、本番コードの少なくとも 2 つの異なるクラスを統合するため、これらは統合テストと見なされる可能性があります。AppFabric のクラスにインターフェイスを実装してから、インターフェイスを実装するスタブやモックを使用してキャッシュ プロバイダー クラスをテストする場合、これは単体テストと見なされます。

  2. Michael Feathers は、1/10 秒以上はユニット テストには遅すぎると彼の著書「レガシー コードを効果的に使用する」(13 ページ) で定義しています。また、実行に時間がかかる傾向がある統合テスト。

    その理由は、数千 (たとえば 10,000) のテストがあり、それぞれが 1/10 秒かかる場合、それらを実行するのに約 17 分かかるからです。最新の変更をコミットするたびにテストを実行する場合 (何かを壊した場合に迅速なフィードバックを得るために)、それは長すぎる可能性があります。これは、遅い単体テストを書くべきではないという意味ではなく、必要になるかもしれませんが、プロジェクトが成長するにつれて、より速い単体テストほど頻繁に実行したくないということです。

    また、タイミングが実行ごとにある程度異なる可能性があるため、時間がかかりすぎても失敗させません。それらが一般的に遅い場合は、それらを統合テストでグループ化します。

    さらに、Feathers は 14 ページで次のように要約しています。

    単体テストは高速に実行されます。高速に実行されない場合、それらは単体テストではありません。

    他の種類のテストは、多くの場合、単体テストを装います。次の場合、テストは単体テストではありません。

    1. データベースと通信します。
    2. ネットワークを介して通信します。
    3. ファイルシステムに触れます。
    4. それを実行するには、環境に対して特別なこと (構成ファイルの編集など) を行う必要があります。
于 2012-04-09T23:05:04.920 に答える
1

他のクラス/コンポーネントに依存する必要がある場合、単体テストはできません。システムの他の部分とのクラス統合をテストしています。

この方法でパフォーマンスをテストすることはお勧めしません。同じコードに対する同じテストは、外部要因によって失敗または成功するからです。プロファイラーはIMOへの道です

于 2012-04-09T23:05:44.887 に答える