3

戻り値がデータベースの値に依存するクラスをテストする必要があります。単体テストでデータベースにヒットすることはできましたが、それらの値は変更される可能性があります。これに対する標準的な解決策はありますか?

4

1 に答える 1

4

標準的な答えは、依存関係をモックアウトできるようにクラスを再設計することです。これは通常、データソースをインターフェースとしてクラスに注入することによって行われます。

たとえば、以下のように動作するクラスがある場合があります

class John 
{
     public John() { }
     public void Load()
     {
          // call to db in here e.g SQLCommand
     }                  
}

負荷は SQLCommand に依存するため、これには常にデータベースを呼び出す必要があります

データソース インターフェイスを注入すると、柔軟性が向上します

例えば

class John 
{    IDataSource _db;
     public John(IDataSource db) 
     {
        _db = db;
     }
     public void Load()
     {
        _db.Load("John"); // IDataSource can now be either SQL 
        //or hardcoded or what ever much easier to test
     }                  
}

それができない/しない場合は、このテストを統合テストとして扱う必要があります。そのためのデータを設定してみませんか。たとえば、読みたい行を挿入します。その後、データを元の状態に戻します。これの欠点は、テストが遅くて脆くなることです。

于 2009-10-26T23:19:23.970 に答える