2016-09-19 14 views
-1

C#で単体テストのDataRowを作成する最良の方法は何ですか?C#で多数の列を持つDataRowを単体テストする方法

私はすべてのデータがDataRow変数の中に格納されるクラスアーキテクチャを持っています。使い方?たとえば、顧客リストのレコードをダブルクリックすると、Customerテーブルのレコード全体が_dataRow変数にロードされます。 問題は、Customerテーブルに200以上の列があることです。

質問は、私は手動でDataRow変数を作成し、すべてのテストメソッドのすべての列を埋める必要がありますか?あるいは、すべてのDataRowカラムをモックするためのいくつかの模擬ツールがありますか?

class Customer 
{ 
    private DataRow _dataRow; 

    public Customer(DataRow dataRow) 
    { 
     _dataRow = dataRow; 
    } 

    private string GetCustomerName() 
    { 
     return Convert.ToString(_dataRow["Name"]); 
    } 

    private string GetCustomerAddress() 
    { 
     return Convert.ToString(_dataRow["Street"]) + " " + Convert.ToString(_dataRow["House_No"]); 
    } 

    private int GetAge() 
    { 
     DateTime birthdate = Convert.ToDateTime(_dataRow["Birthdate"]); 
     DateTime today = DateTime.Today; 
     int age = today.Year - birthdate.Year; 
     if (birthdate > today.AddYears(-age)) 
      age--; 
     return age; 
    } 
} 
+1

レコードでハードコードされたデータテーブルを使用して単体テストでデータローを注入できないのはなぜですか? – Sievajet

答えて

1

あなたはのDataRowのすべての列がすべてのテスト設定/モックする必要はありません。各テストでは、機能の小さな部分のみをテストする必要があるため、200列のサブセットのみを使用してください。

テストの出力に影響を与える列は、明示的に設定または偽装されている必要があります(つまり、ショートカットはありません)。特定の列がテストの出力に影響を与えないが、まだ設定が必要な場合(たとえば例外がスローされないようにするため)、クラスのデザインを再考する必要があります。

まだの場合は、すべてのテストで200個の列をすべて設定し、200個のデフォルト値でデータ行を作成する方法を検討し、重要な値を上書きする必要がありますその特定のテスト。パラグラフ1によると、これは各テストの200列の小さなサブセットに過ぎない。

+0

ありがとう、それは論理的に聞こえます。私は200カラムのサブセットを使用しますが、これらはメソッドの必要性をテストしたものだけです。 – PawelD

関連する問題