42

RowTestMSTest がおよび同様のテストをサポートしていないことは知っています。

ユーザーは何をしMSTestsますか?RowTestサポートなしでどうやって生活できるの?

テスト機能を見てきましDataDrivenたが、オーバーヘッドが多すぎるように思えRowTestます。.で同様のテストを実行できるサードパーティのパッチまたはツールはありMSTestますか?

4

6 に答える 6

38
[TestMethod]
Test1Row1
{
    Test1(1,4,5);
}

[TestMethod]
Test1Row2
{
    Test1(1,7,8);
}

private Test1(int i, int j, int k)
{
   //all code and assertions in here
}
于 2009-07-30T08:48:41.713 に答える
6

VS2012 Update1 で DataRow のサポートを追加しました。簡単な紹介については、このブログを参照してください

VS2012 Update1 では、この機能は現在 Windows ストア アプリに限定されています。それ以降のバージョンでは、この制限はありません。

于 2012-12-14T08:56:38.690 に答える
2

MS テスト フレームワークの使用に固執している私のチームでは、匿名型のみに依存してテスト データの配列を保持し、LINQ をループして各行をテストする手法を開発しました。追加のクラスやフレームワークは必要なく、読みやすく理解しやすい傾向があります。また、外部ファイルや接続されたデータベースを使用したデータ駆動型テストよりも実装がはるかに簡単です。

たとえば、次のような拡張メソッドがあるとします。

public static class Extensions
{
    /// <summary>
    /// Get the Qtr with optional offset to add or subtract quarters
    /// </summary>
    public static int GetQuarterNumber(this DateTime parmDate, int offset = 0)
    {
        return (int)Math.Ceiling(parmDate.AddMonths(offset * 3).Month / 3m);
    }
}

LINQ に結合された匿名型の配列を使用して、次のようなテストを作成できます。

[TestMethod]
public void MonthReturnsProperQuarterWithOffset()
{
    // Arrange
    var values = new[] {
        new { inputDate = new DateTime(2013, 1, 1), offset = 1, expectedQuarter = 2},
        new { inputDate = new DateTime(2013, 1, 1), offset = -1, expectedQuarter = 4},
        new { inputDate = new DateTime(2013, 4, 1), offset = 1, expectedQuarter = 3},
        new { inputDate = new DateTime(2013, 4, 1), offset = -1, expectedQuarter = 1},
        new { inputDate = new DateTime(2013, 7, 1), offset = 1, expectedQuarter = 4},
        new { inputDate = new DateTime(2013, 7, 1), offset = -1, expectedQuarter = 2},
        new { inputDate = new DateTime(2013, 10, 1), offset = 1, expectedQuarter = 1},
        new { inputDate = new DateTime(2013, 10, 1), offset = -1, expectedQuarter = 3}
        // Could add as many rows as you want, or extract to a private method that
        // builds the array of data
    }; 
    values.ToList().ForEach(val => 
    { 
        // Act 
        int actualQuarter = val.inputDate.GetQuarterNumber(val.offset); 
        // Assert 
        Assert.AreEqual(val.expectedQuarter, actualQuarter, 
            "Failed for inputDate={0}, offset={1} and expectedQuarter={2}.", val.inputDate, val.offset, val.expectedQuarter); 
        }); 
    }
}

この手法を使用する場合、Assert に入力データを含む書式設定されたメッセージを使用すると、テストが失敗する原因となった行を特定するのに役立ちます。

AgileCoder.netで、このソリューションの背景と詳細についてブログを書いています。

于 2015-01-10T21:45:22.837 に答える
0

PostSharp を使用した DaTest (2008 年以降更新されていない) ソリューションと同様に、ブログhttp://blog.drorhelper.com/2011/09/enabling-parameterized-tests-in-mstest.htmlで説明されています。

于 2012-10-06T01:02:56.257 に答える