我们将使用Theory Attribute做什么?

时间:2010-05-25 01:47:49

标签: .net unit-testing nunit

我在NUnit中发现了[Theory][Datapoint]属性。我不太清楚我应该如何使用它们。我认为它们可用于数据驱动测试,这让我感兴趣。可用资源不多。有人可以向我解释如何使用它们或指向我的资源?感谢。

2 个答案:

答案 0 :(得分:1)

您是否看过在线NUnit文档?这里有一个例子,向您展示如何使用[Theory]和[Datapoint]属性:

http://www.nunit.org/index.php?p=theory&r=2.5.3

答案 1 :(得分:0)

  

理论是一种特殊类型的测试,用于验证一般性陈述   关于正在开发的系统。正常测试是基于示例的。   也就是说,开发者提供一个或多个输入和示例   预期的输出要么在测试代码中,要么在 - 的情况下   参数化测试 - 作为测试方法的参数。一个理论,关于   另一方面,作出一般性陈述,即所有断言   将通过满足某些假设的所有论据。

     

理论在NUnit中作为TestFixture内的方法实施,   它们使用TheoryAttribute[Theory])进行注释。理论   方法必须始终具有参数,因此看起来非常相似   乍一看参数化测试然而,理论结合了   其参数的其他数据源并允许特殊   处理有关该数据的假设。关键的区别,   但是,理论是否是一般性陈述而不仅仅是   只是一组例子。

     

理论数据

     

理论的主要数据来源是Datapoint或Datapoints   属性。 NUnit将使用所需类型的任何字段   使用其中一个属性进行注释,为每个属性提供数据   理论参数。 NUnit汇集了个人的价值观   组合论证为理论提供测试案例。

     

除了Datapoint和Datapoints属性之外,还有可能   使用任何方法提供可识别的数据   正常的参数化测试。我们建议不要这样做   过度使用,因为它与测试之间的区别背道而驰   基于实例和理论。但是,它可能是有用的   保证包含特定的测试用例。

     

假设

     

理论本身有责任确保提供所有数据   符合其假设。它通过使用Assume.That(...)来做到这一点   构造,就像Assert.That(...)一样工作,但不会导致   失败。如果特定测试不满足该假设   case,该案例返回Inconclusive结果,而不是Success   或失败。

     

对一组测试用例执行理论的总体结果是   确定如下:

     

如果所有测试用例违反了假设,那么理论   本身被标记为失败。如果任何断言失败,理论   本身失败了。如果至少某些案例通过了规定的假设,   并且没有断言失败或例外,那么理论   经过。

     

示例:

     

在以下示例中,理论SquareRootDefinition进行验证   平方根的实现满足以下要求   定义:

     

"给定非负数,该数字的平方根始终为   非负的,当与自身相乘时,给出原始的   。数"

public class SqrtTests
{
    [Datapoint]
    public double zero = 0;

    [Datapoint]
    public double positive = 1;

    [Datapoint]
    public double negative = -1;

    [Datapoint]
    public double max = double.MaxValue;

    [Datapoint]
    public double infinity = double.PositiveInfinity;

    [Theory]
    public void SquareRootDefinition(double num)
    {
        Assume.That(num >= 0.0 && num < double.MaxValue);

        double sqrt = Math.Sqrt(num);

        Assert.That(sqrt >= 0.0);
        Assert.That(sqrt * sqrt, Is.EqualTo(num).Within(0.000001));
    }
}

Taken from