8

ユニット テスト フレームワークは初めてです。VS 2010 を使用して、XML をデータソースとして使用します。

XML が次のようになるとします。

<testgroup>
  <test>
    <param1>100</param1>
    <param2>200</param2>
  </test>
  <test>
    <param1>333</param1>
    <param2>222</param2>
  </test>
</testgroup>

したがって、テスト グループには多くのテストが含まれる可能性があります。それらを個々の xml ファイルに分割するのは効率的ではありません。簡単にするために、param1 が int で、param2 が別の int であると仮定します。私のテストでは、param2 > param1 であることを確認します。

単体テスト フレームワークがそれぞれのテストを表示するように、XML からさまざまなテストを反復処理するように単一の TestMethod を作成することは可能ですか?

私はこれまでのところ解決策を見つけていません。おそらく、データソースは、このように駆動されるテスト データであることを意図していません。

4

1 に答える 1

15

NUnit を使用すると、次のことができます。

[TestMethod]
public void TestDerpMethod(int a, string b, bool c)
{
    //...test code...
}

次のように複数のテストケースを実行できます。

[TestMethod]
[TestCase(12, "12", true)]
[TestCase(15, "15", false)]
public void TestDerpMethod(int a, string b, bool c)
{
    //...test code...
}

このメソッドを使用して、XML でこのメソッドを使用することもできます。

<Rows>
    <Row>
        <A1>1</A1>
        <A2>1</A2>
        <Result>2</Result>
    </Row>
    <Row>
        <A1>1</A1>
        <A2>2</A2>
        <Result>3</Result>
    </Row>
    <Row>
        <A1>1</A1>
        <A2>-1</A2>
        <Result>1</Result>
    </Row>
</Rows>

そしてC#:

[TestMethod]
[DeploymentItem("ProjectName\\SumTestData.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
                   "|DataDirectory|\\SumTestData.xml",
                   "Row",
                    DataAccessMethod.Sequential)]
public void SumTest()
{
    int a1 = Int32.Parse((string)TestContext.DataRow["A1"]);
    int a2 = Int32.Parse((string)TestContext.DataRow["A2"]);
    int result = Int32.Parse((string)TestContext.DataRow["Result"]);
    ExecSumTest(a1, a2, result);
}


private static void ExecSumTest(int a1, int a2, int result)
{
    Assert.AreEqual(a1 + a2, result);
}
于 2013-01-12T00:41:47.337 に答える