我在NUnit中发现了[Theory]
和[Datapoint]
属性。我不太清楚我应该如何使用它们。我认为它们可用于数据驱动测试,这让我感兴趣。可用资源不多。有人可以向我解释如何使用它们或指向我的资源?感谢。
答案 0 :(得分:1)
您是否看过在线NUnit文档?这里有一个例子,向您展示如何使用[Theory]和[Datapoint]属性:
答案 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)); } }