首页 > 解决方案 > 将结果添加到 TestCaseSource

问题描述

我有一个简单的方法,可以从列表中计算给定的计算。我想为此方法编写一些测试。

我正在使用 NUnit。我正在使用 TestCaseSource 因为我试图将列表作为参数。我有这个问题的解决方案。我的测试如下所示:

[TestFixture]
    public class CalcViewModelTests : CalcViewModel
    {
        private static readonly object[] _data =
            {
                new object[] { new List<string> { "3", "+", "3" } },
                new object[] { new List<string> { "5", "+", "10" } }
            };

        [Test, TestCaseSource(nameof(_data))]
        public void Test(List<string> calculation)
        {
            var result = SolveCalculation(calculation);

            Assert.That(result, Is.EqualTo("6"));
        }
    }

我想测试多个计算,例如使用 testCases。

TestCases 有Result 参数。如何将 Result 添加到 TestCaseSource 以便我可以测试多个计算?

标签: c#unit-testingtestingnunit

解决方案


您可以TestCaseData为此使用属性。它允许您将测试数据封装在一个单独的类中并重用于其他测试

public class MyDataClass
{
    public static IEnumerable TestCases
    {
        get
        {
            yield return new TestCaseData("3", "+", "3").Returns("6");
            yield return new TestCaseData("5", "+", "10").Returns("15");
        }
    }  
}

[Test]
[TestCaseSource(typeof(MyDataClass), nameof(MyDataClass.TestCases))]
public string Test(List<string> calculation)
{
      var result = SolveCalculation(calculation);
      return result;
}

推荐阅读