ここ数日以来、私はデータ駆動型単体テストに取り組んでいました。データ ソースとして Excel スプレッドシートを使用しました。テストメソッドの冗長コードを減らしますが(すべてのテストデータをテストメソッドに書き込んで毎回同じ関数を呼び出すのではなく)、一方でユニットテストを複雑にしていると思います(構成設定、Excelからのデータの解析、予期しない例外など)。誰でも、各アプローチの長所と短所に光を当てることができますか. 理解を深めるために、データ ソースを使用する場合と使用しない場合のサンプル テスト メソッドを以下に示します。
データ ソースあり
[TestMethod]
[DataSource("CompanyAddressInfo_DataSource")]
[DeploymentItem("CoreUnitTests\\CompanyUnitTests\\CompanyTestData.xlsx")]
public void CompanyAddressInfo_GetItem_Test()
{
if (TestContext.DataRow["Company_No"] != DBNull.Value)
{
bool expected = false;
bool actual=false;
if (TestContext.DataRow["Expected"].ToString() == "Y")
expected = true;
long Company_No = Convert.ToInt64(TestContext.DataRow["Company_No"]);
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
if (obj != null)
{actual = (obj.Company_No == Company_No);}
Assert.AreEqual(expected,actual);
}
}
データ ソースなし
[TestMethod]
public void CompanyAddressInfo_GetItem_Test()
{
bool actual=false;
long Company_No;
Company_No = 20;
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
actual = (obj.Company_No == Company_No);
Assert.AreEqual(true,actual);
Company_No = 23;
CompanyAddressInfo obj = CompanyAddressInfo.GetItem(Company_No);
actual = (obj.Company_No == Company_No);
Assert.AreEqual(false,actual);
..............so on
}
上記のコードは単なる例であることに注意してください。また、データ駆動型単体テストの別の代替手段として、dll を呼び出すための汎用関数を作成し、テスト データをこの関数に渡すことが考えられます (したがって、冗長性を減らします)。