web-dev-qa-db-ja.com

さまざまな入力でテスト方法を設定する

すべてのコードパスについて、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 Studio2010/2012および.Net4.0を使用しています

12
Gobliins

XML、データベース、またはCSVデータソースのMSテスト を使用できます。 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
}
22

NUnitを使用している場合 パラメータ化されたテスト が進むべき道です

8
mhoff

MSテストでは、同じテスト方法に対して異なる入力を受け入れるデータ駆動型テストを作成できます。

これに関するブログ投稿は次のとおりです。 http://toddmeinershagen.blogspot.ca/2011/02/creating-data-driven-tests-in-ms-test.html

3
Mike Parkhill