这里只是一些示例代码,但我有一些字符串列表,我想测试我的函数。我不喜欢的部分是当第一个Assert失败时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);
}
}
}
}
答案 0 :(得分:6)
使用[TestCaseSource]
属性指定要传递到(现已参数化)测试方法的值。
我们在Noda Time中使用 lot 来测试很多具有不同文化和字符串的案例。
这是你的例子,转换为使用它:
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]
,这意味着您的测试数据不需要单独的变量。