【问题标题】:C# unit test, how to test greater thanC#单元测试,如何测试大于
【发布时间】:2011-05-07 11:48:01
【问题描述】:

在 C# 中,如何对大于条件进行单元测试?

即,如果记录数大于 5,则测试成功。

感谢任何帮助

代码:

int actualcount = target.GetCompanyEmployees().Count
Assert. ?

【问题讨论】:

    标签: c# unit-testing testing


    【解决方案1】:

    除了好的答案,你总是可以有一个帮助类:

    public static class AssertHelper
    {
        public static void Greater(int arg1, int arg2, string message = null)
        {
            Assert.IsTrue(arg1 > arg2, message);
        }
    
        public static void NotZero(int number, string message = null)
        {
            Assert.IsTrue(number != 0, message);
        }
    
        public static void NotNull(object obj, string message = null)
        {
            Assert.IsTrue(obj != null, message);
        }
    
        public static void IsNotEmpty(string str, string message = null)
        {
            Assert.IsTrue(str != string.Empty, message);
        }
    
        // etc...
    }
    

    用法:

    AssertHelper.Greater(n1,n2)
    

    【讨论】:

      【解决方案2】:

      xUnit:如果您知道上限(例如 =100),您可以使用:

      Assert.InRange(actualCount, 5, 100);
      

      【讨论】:

        【解决方案3】:

        使用 nUnit 时正确的做法是:

        Assert.That(actualcount , Is.GreaterThan(5));
        

        【讨论】:

        • 'Microsoft.VisualStudio.TestTools.UnitTesting.Assert' 不包含 'That' 的定义。在 VS 2012 中。
        • 如果你更倾向于使用经典的 NUnit 断言风格,另一个选择是Assert.Greater(actualcount, 5);
        【解决方案4】:

        这取决于您使用的测试框架。

        对于 xUnit.net:

        Assert.True(actualCount > 5, "Expected actualCount to be greater than 5.");

        对于 NUnit:

        Assert.Greater(actualCount, 5);;然而,新的语法

        鼓励Assert.That(actualCount, Is.GreaterThan(5));

        对于 MSTest:

        Assert.IsTrue(actualCount > 5, "Expected actualCount to be greater than 5.");

        【讨论】:

          【解决方案5】:

          在 XUnit 中是:

              [Fact]
              public void ItShouldReturnErrorCountGreaterThanZero()
              {
                  Assert.True(_model.ErrorCount > 0);
              }
          

          【讨论】:

            【解决方案6】:

            可用于任何类似类型的通用解决方案:

            public static T ShouldBeGreaterThan<T>(this T actual, T expected, string message = null)
                where T: IComparable
            {
                Assert.IsTrue(actual.CompareTo(expected) > 0, message);
                return actual;
            }
            

            【讨论】:

              【解决方案7】:

              actualCount.Should().BeGreaterThan(5);

              【讨论】:

              • 看起来不错,这是 ? 的扩展方法要定义什么命名空间?
              • 这仅对 FluentAssertions 有用,但正如 @ShloEmi 告诉 NKnusperer 的那样,对使用它的人来说是个好建议。
              【解决方案8】:
              Assert.IsTrue(actualCount > 5, "The actualCount was not greater than five");
              

              【讨论】:

              • 但是最好放一条消息让你知道测试失败的原因:Assert.IsTrue(actualCount > 5, "The actualCount was not greater than 5");
              • @McKay:我个人认为这是白费力气。如果测试失败,无论如何我都会查看它的代码,因此它不会节省太多时间即使它失败,并且大多数断言在第一次检查后永远不会失败 -在 IME 中。
              • 嗯,经常,我编写测试的方式是测试代码将针对一堆不同的测试运行。因此,虽然我会查看代码,但我并不总是查看执行断言的代码,因为它们并不总是靠近在一起。
              • @Sri:请标记为答案。
              猜你喜欢
              • 2012-12-20
              • 1970-01-01
              • 2012-01-08
              • 1970-01-01
              • 2013-06-30
              • 1970-01-01
              • 2015-10-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多