Unit testing 如何让NUnit测试列表中的所有值,而不仅仅是第一次失败

Unit testing 如何让NUnit测试列表中的所有值,而不仅仅是第一次失败,unit-testing,nunit,Unit Testing,Nunit,这里只是一些示例代码,但我有一些字符串列表,我想测试我的函数。我不喜欢的是,当第一个断言失败时,NUnit在每个测试中都会停止。我想测试每个值并报告每个失败,而不仅仅是第一个。不过,我不想为每个字符串编写新的[Test]函数 有办法做到这一点吗 using NUnit.Framework; using System.Collections.Generic; namespace Examples { [TestFixture] public class ExampleTests

这里只是一些示例代码,但我有一些字符串列表,我想测试我的函数。我不喜欢的是,当第一个断言失败时,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);
            }
        }
    }
}
使用NUnit.Framework;
使用System.Collections.Generic;
名称空间示例
{
[测试夹具]
公共类示例测试
{
私有列表validstring=新列表{“Valid1”、“valid2”、“valid3”、“Valid4”};
私有列表invalidStrings=新列表{“Invalid1”、“invalid2”、“invalid3”和“\”;
[测试]
public void TestValidStrings()
{
foreach(validStrings中的var项目)
{
Assert.IsTrue(item.Contains(“有效”),item);
}
}
[测试]
公共无效测试验证字符串()
{
foreach(InvalidString中的var项)
{
Assert.IsFalse(item.Contains(“无效”),item);
}
}
}
}
使用该属性指定要传递到(现在已参数化)测试方法中的值

我们在中经常使用它来测试具有不同区域性和字符串的许多案例

下面是您的示例,转换为使用它:

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);
    }
}
使用NUnit.Framework;
使用System.Collections.Generic;
//为简洁起见,已删除命名空间
[测试夹具]
公共类示例测试
{
私有列表validStrings=新列表
{“Valid1”、“valid2”、“valid3”、“Valid4”};
私有列表InvalidString=新列表
{“Invalid1”、“invalid2”、“invalid3”、“Invalid1”;
[测试]
[TestCaseSource(“validStrings”)]
公共void TestValidString(字符串项)
{
Assert.IsTrue(item.Contains(“有效”),item);
}
[测试]
[TestCaseSource(“InvalidString”)]
公共无效测试验证字符串(字符串项)
{
Assert.IsFalse(item.Contains(“无效”),item);
}
}

请注意,另一个选项是使用,这意味着您的测试数据不需要单独的变量。

我使用的是NUnit 2.4,因此我需要更新到2.5/2.6才能获得此值。非常感谢。