3

ここにいくつかのサンプルコードがありますが、関数をテストしたい文字列のリストがあります。私が気に入らないのは、最初のアサートが失敗すると、各テストでNUnitが停止することです。最初の値だけでなく、それぞれの値をテストして、それぞれの失敗を報告したいと思います。ただし、文字列ごとに新しい[Test]関数を作成する必要はありません。

これを行う方法はありますか?

using NUnit.Framework;
using System.Collections.Generic;

namespace Examples
{
    [TestFixture]
    public class ExampleTests
    {
        private List<string> validStrings = new List<string> { "Valid1", "valid2", "valid3", "Valid4" };
        private List<string> invalidStrings = new List<string> { "Invalid1", "invalid2", "invalid3", "" };

        [Test]
        public void TestValidStrings()
        {
            foreach (var item in validStrings)
            {
                Assert.IsTrue(item.Contains("valid"), item);
            }
        }

        [Test]
        public void TestInvalidStrings()
        {
            foreach (var item in invalidStrings)
            {
                Assert.IsFalse(item.Contains("invalid"), item);
            }
        }
    }
}
4

1 に答える 1

6

この属性を使用[TestCaseSource]して、(現在パラメーター化されている)テストメソッドに渡す値を指定します。

これを野田時間でよく使用して、文化や文字列が異なる多くのケースをテストします。

これがあなたの例であり、それを使用するように変換されています:

using NUnit.Framework;
using System.Collections.Generic;

// Namespace removed for brevity    
[TestFixture]
public class ExampleTests
{
    private List<string> validStrings = new List<string> 
        { "Valid1", "valid2", "valid3", "Valid4" };
    private List<string> invalidStrings = new List<string> 
        { "Invalid1", "invalid2", "invalid3", "" };

    [Test]
    [TestCaseSource("validStrings")]
    public void TestValidStrings(string item)
    {
        Assert.IsTrue(item.Contains("valid"), item);
    }

    [Test]
    [TestCaseSource("invalidStrings")]
    public void TestInvalidStrings(string item)
    {
        Assert.IsFalse(item.Contains("invalid"), item);
    }
}

別のオプションを使用することであることに注意して[TestCase]ください。これは、テストデータに個別の変数を必要としないことを意味します。

于 2012-06-28T16:58:00.090 に答える