12

すべてのコード パスについて、C# で次のメソッドをテストしたいと考えています。

public int foo (int x)
{
    if(x == 1)
        return 1;
    if(x==2)
        return 2;
    else
        return 0;
}

複数の入力がテストされるこのpex 単体テストを見てきました。複数の入力を受け入れる単体テストを作成するにはどうすればよいですか?

[TestMethod()] //some setup here??
    public void fooTest()
    {
         //some assert
    }

入力ごとにテストメソッドを作成することは避けたいです。Visual Studio 2010/2012 および .Net 4.0 で作業しています

4

3 に答える 3

23

XML、データベース、または CSV データソースの MS Testを使用できます。FooTestData.xml を作成します。

<?xml version="1.0" encoding="utf-8" ?>
<Rows>
  <Row><Data>1</Data></Row>
  <Row><Data>2</Data></Row>
</Rows>

そして、それをテストのデータソースとして設定します:

[TestMethod]
[DeploymentItem("ProjectName\\FooTestData.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
                   "|DataDirectory|\\FooTestData.xml", "Row",
                    DataAccessMethod.Sequential)]
public void FooTest()
{
    int x = Int32.Parse((string)TestContext.DataRow["Data"]);
    // some assert
}

ところで、NUnit フレームワークとの一致はより簡単です。TestCase 属性を使用してテスト データを提供できます。

[TestCase(1)]
[TestCase(2)]
public void FooTest(int x)
{
   // some assert
}
于 2013-01-03T12:33:37.610 に答える
8

NUnit のパラメーター化されたテストを使用する方法がある場合

于 2013-01-03T12:33:48.170 に答える
3

MS Testでは、同じテスト メソッドに対して異なる入力を受け入れるデータ ドリブンテストを作成できます。

これに関するブログ投稿は次のとおりです

于 2013-01-03T12:34:46.470 に答える