web-dev-qa-db-ja.com

MSTestはNUnitのパラメーター化されたテストと同等ですか?

NUnitは、単体テストを複数回実行するための一連のデータ入力を指定できる機能をサポートしています。

[RowTest]
[Row(1001,1,2,3)]
[Row(1,1001,2,3)]
[Row(1,2,1001,3)]
public void SumTests(int x, int y, int z, int expected)
{
   ...
}

MSTestを使用してこの同じタイプのことを達成する最良の方法は何ですか?同様の属性のセットが見つかりません。

51
blaster

this は役に立ちますか?

今週は、TFSで管理されているプロジェクトにいくつかの単体テストを追加していたため、VS2008で利用可能な「コア」単体テストフレームワークを使用することにしましたが、残念ながら、これはRowTestsをサポートしていません。しかし、データ駆動型単体テストと呼ばれる同様の機能があります。このアプローチでは、「単純な」RowTestシナリオを実装するのが少し複雑になりますが、より複雑なシナリオを実装することもできます。

19
Jorge Ferreira

MSTest2を使用している場合は、DataRow + DataTestMethodを使用して正確にこれを行うことができます。

[DataRow(Enum.Item1, "Name1", 123)]
[DataRow(Enum.Item2, "Name2", 123)]
[DataRow(Enum.Item3, "Name3", 456)]
[DataTestMethod]
public void FooTest(EnumType item, string name, string number)
{
    var response = ExecuteYourCode(item, name, number);

    Assert.AreEqual(item, response.item);
}

それについての詳細 ここ

25

ここに示すように、mstestの小さな拡張機能を記述することで、この機能を利用できます。

http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-2.aspx

9
Aseem Bansal

実際、パラメーター化された単体テスト(PUT)は、単体テストの自然な一般化です。また、Microsoft ResearchにはPexというプロジェクトがあり、テスト対象クラス(CUT)のPUTを自動的に生成します。 Pexは自動テスト入力生成ツールです。 Pexツールは、テストデータを自分で準備する代わりに、CUTのパラメーターの対象の入力を見つけ、それに応じてユニットテストケースを生成します。 こちら を確認してください。

1
smwikipedia

私の答えは、@ oscar-e-fraxedas-tormoと似ています。
内部に1〜100のテストメソッドを持つ生成されたクラスの1つからサブクラス化し、派生クラスにすべてのテストロジックを提供できます。以下の例では:

[TestClass]
public class Ha_ha_ha_Test: MsTestRows.Rows.TestRows_42<string>
{
    public override void TestMethod(string dataRow, int rowNumber)
    {
        Console.WriteLine(dataRow);
        Assert.IsFalse(dataRow.Contains("3"));
    }

    public override string GetNextDataRow(int rowNumber)
    {
        return "data" + rowNumber;
    }
}

クラスHa_ha_ha_Testには、42で生成された行(メソッド)が含まれます。この行ごとに、必要なテストデータを提供するために、カスタムメソッドGetNextDataRowが呼び出されます。

詳細:

https://github.com/dzhariy/mstest-rows

0
Dmytro Zharii