【问题标题】:Add Result to TestCaseSource将结果添加到 TestCaseSource
【发布时间】:2019-07-10 08:50:00
【问题描述】:

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

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

[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 parameter。如何将 Result 添加到 TestCaseSource 以便我可以测试多个计算?

【问题讨论】:

    标签: c# unit-testing testing nunit


    【解决方案1】:

    您可以为此使用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;
    }
    

    【讨论】:

      【解决方案2】:

      看起来应该可以:

      private static readonly object[] _data =
          {
              new object[] { new List<string> { "3", "+", "3" }, "6" },
              new object[] { new List<string> { "5", "+", "10" }, "15" }
          };
      
      [Test, TestCaseSource(nameof(_data))]
      public void Test(List<string> calculation, string expectedResult)
      {
          var result = SolveCalculation(calculation);
      
          Assert.That(result, Is.EqualTo(expectedResult));
      }
      

      【讨论】:

      • 如果您使用[TestCaseSource] 进行注释,则无需同时使用[Test] 进行注释。这应该没问题:[TestCaseSource(nameof(_data))] public void Test(List&lt;string&gt; calculation, string expectedResult) { ... }.
      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多