0

基本的にデータベースのフロントエンドであるデスクトップアプリケーションを作成しました。さまざまなリンクされたオブジェクトの作成、読み取り、更新操作に使用され、いくつかの簡単な計算とデータ集計を実行します。テストを簡素化するために、MVVM パターンに従いました。今朝、最初のテストを書いてみましたが、思ったほど単純ではないことに気付きました。単体テストは単一の操作の結果を確認するのに最適ですが、残念ながら、相互にリンクされた複雑なオブジェクトを処理する必要があります。私は自分の問題をよりよく説明しようとします。1) クラス A のオブジェクトを作成してテストできます。テストを 100 回繰り返すと、データベースが汚染されます。それをきれいにするための自動手順が必要です。2) クラス B のオブジェクトは、一部の操作でクラス A のオブジェクトを必要とします。オブジェクト A と B の両方が作成されるテストを作成するのは良い考えではないと思います。

Visual Studio 2012 Express には単体テストの基本的なサポートがあるため、それに切り替えましたが、特別なニーズに合わせてより適切に使用する方法についてのガイドラインが必要です。

ありがとうフィリッポ

4

1 に答える 1

1

「レガシー」コード (単体テストのないコード) の単体テストを作成するのは非常に困難です。

問題は、単体テストは、他のコードに依存することなく、完全に分離して単一のクラスをテストすることです。

例えば:

public class MyMVVMClass
{
    public void CreateComplexObject()
    {
        var myDatabaseObject = new MyDatabaseObject();
        myDatabaseObject.DoSomethingComplexWithTheDatabase();
    }
}

この小さなコード例は、アクセス可能な実際のデータベースに依存しているため、単体テストは不可能です。この種のテストは統合テストと呼ばれます。それらは重要であり、間違いなく用途がありますが、単体テストではありません。

テスト容易性のためにコードを改善するために使用できる大きなパターンの 1 つは、Inversion Of Controlです。これは、これらの依存関係の有効期間を管理するコンテナー オブジェクトを使用して、クラスに依存関係を注入することを意味します。

単体テストでは、 Moqなどのツールを使用して、これらの依存関係を偽造し、簡単にテストできるようにすることができます。

私はこれについて少し前に記事を書きました。多分それは役立つかもしれません:単体テスト、地獄か天国か?

于 2012-10-29T13:00:46.960 に答える