【问题标题】:How to get NUnit to test all values in a list, rather than just the first failure如何让 NUnit 测试列表中的所有值,而不仅仅是第一次失败
【发布时间】:2012-06-28 16:55:06
【问题描述】:

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

【问题讨论】:

    标签: unit-testing nunit


    【解决方案1】:

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

    【讨论】:

    • 我使用的是 NUnit 2.4,所以我需要更新到 2.5/2.6 才能获得这个。谢谢
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2021-09-17
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多