gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:18:46 26 4
gpt4 key购买 nike

这里只是一些示例代码,但我有一些字符串列表,我想根据这些列表测试我的函数。我不喜欢的部分是,当第一个 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);
}
}
}
}

最佳答案

使用 [TestCaseSource]属性指定要传递到您的(现在参数化的)测试方法的值。

我们在 Noda Time 中使用了很多测试大量具有不同文化和字符串的案例。

这是您的示例,已转换为使用它:

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]这意味着您的测试数据不需要单独的变量。

关于unit-testing - 如何让 NUnit 测试列表中的所有值,而不仅仅是第一个失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com