【问题标题】:How to properly unit test inequality如何正确地对不等式进行单元测试
【发布时间】:2019-02-13 22:28:21
【问题描述】:

因此,单元测试的目标之一是确保未来的更改/重构不会破坏现有功能。假设我们有以下方法:

public bool LessThanFive(double a) {
  return a < 5;
}

对此进行统一测试的一种方法如下:

public bool LessThanFiveTests_True() {
  const double a = 4;
  Assert.IsTrue(LessThanFive(a))
}

这个单元测试的问题在于,如果稍后有人在LessThanFive 方法中将&lt; 更改为&lt;=,则测试将通过。

如果我们使用DateTime 而不是double 会怎样?

【问题讨论】:

  • 关于DateTime 的问题:您能否解释一下您想要测试的DateTime 代码的外观?

标签: c# unit-testing


【解决方案1】:

您的假设似乎是您编写了一个测试,并且该测试捕获了所有可能的错误。相反更接近事实:对于每个潜在的错误,您需要一个测试来捕捉它。在实践中,当然,许多测试会发现一些潜在的错误,但我夸大了一点来传达这个想法。

因此,要捕获&lt; 变成&lt;= 的潜在错误,您需要第二个测试用例来尝试使用5 的功能。这是,顺便说一句。所谓的边界测试,而边界测试是推导出一组有用的测试用例的一种众所周知的方法。

还有更多的测试设计技术,例如等价类划分、分类树、基于覆盖率的测试等。这些方法的基本目标是指导您开发测试套件,理想情况下为每个潜在错误提供相应的测试存在将检测到该错误的案例。

【讨论】:

  • 尝试确保参数的任何小于 5 的值都为真的测试怎么样?更具体地说,在测试中应该为a 使用哪个值?如果类型是DateTime怎么办?
  • 对于a,如果你真的想准确地测试边界,你可以使用nextDown(5.0)之类的东西,因为C#有这个功能。请参阅:stackoverflow.com/questions/1245870/…
猜你喜欢
  • 2010-09-23
  • 2014-01-30
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多