私はASP.NETを使用しているいくつかのプロジェクトを持っています。データベースに関係していない私のプロジェクトのいくつかの関数の単体テストが作成されました。しかし、私はデータベースに関わる他の部分の単体テストを作成していません。プロジェクト全体(データベースを含む)の単体テストを作成するには?
私は自分のプロジェクト全体について完全な単体テストをするために何をすべきか分かりません。 データベースに関係するいくつかの関数の単体テストを作成する方法は?
私はASP.NETを使用しているいくつかのプロジェクトを持っています。データベースに関係していない私のプロジェクトのいくつかの関数の単体テストが作成されました。しかし、私はデータベースに関わる他の部分の単体テストを作成していません。プロジェクト全体(データベースを含む)の単体テストを作成するには?
私は自分のプロジェクト全体について完全な単体テストをするために何をすべきか分かりません。 データベースに関係するいくつかの関数の単体テストを作成する方法は?
ユニットテストは、その名前が示すように、真のユニットであるべきであり、独立してテスト可能でなければなりません。関数がサービスやデータベース呼び出しのようないくつかの外部要因に依存する場合、ネットワークの可用性や待ち時間のような他のいくつかの要因が発生するため、結果を予測することは非常に困難です。
私たちのメソッドが外部私たちはテストアプリケーションでそれらをモックしなければならないことをお勧めします。このいずれかの互換性のモックフレームワークによって達成することができ、そのようなフレームワークは、部品番号FrameworkがASP.NETでこの問題に対処するための一般的な方法のようなインターフェイスを作成することですhttps://github.com/moq/moq4
私はそれをどのように使用するのか分かりません。 Btw、ありがとうございました。 –
外部サービス/ IO /データベース呼び出しの単体テストに役立つ唯一のソリューションは、模擬フレームワークです。今、あなたがこれらのフレームワークを理解することができるかどうか、それは別の話です。だからあなたが他の考えを持っていなければ、これを受け入れられた答えとしてください。 –
で発見されています
public interface IDatabase
{
void Delete(MyItemType item);
void Update(MyItemType item);
void Insert(MyItemType item);
}
あなたはそして、依存関係のパラメータとしてインターフェイスを受け入れ、その後、具体的なラッパークラスを作成するためにテストされていない方法やその親クラスをコーディング:
public class DatabaseImplementation : IDatabase
{
//Implement interface here and wrap calls to real database
}
その後、手動で行うことができ、このクラスを注入する必要があるでしょうが、私は、制御と依存性注入の逆転について読むことを強く勧めます。その後、Castle WindsorやStructureMapのようなコントロールフレームワークの逆転を使用して、自動的に物事を管理することができます。
これで、moqのような模擬フレームワークを使用してIDatabaseの模擬実装を作成することができるようになり、削除、更新、挿入などの動作時の振る舞いを指示できます。と呼ばれる。
あなたが役に立つと思えば、コントロールフレームワークの反転を使ってユニットテストにモックを自動的に注入することさえできます。
多くの読書や仕事のように聞こえるが、これらのコンセプトは単体テストをきれいにし、コードをメンテナンス可能な方法で設計することを奨励する。
幸運を祈る!
データベースやその他の外部リソースが「テストする」テストは、ユニットテストではなく、統合テストです。ユニットテストと同じ方法で作成しますが、テストに必要なデータベース接続とデータを設定する必要があります – Fabio