【问题标题】:Boundary Case Testing in JavaJava中的边界案例测试
【发布时间】:2011-08-05 09:07:48
【问题描述】:

是否有任何用于 JUnit 或 Java 实践的工具允许准确地测试“小于”和“大于”等边界案例测试?

例如,将货币值四舍五入到最接近的美分。 测试 0.005 到 0.01 很容易。 测试

我显然可以测试像 0.0049 这样的任意值,但这并不能保证像 0.00499 这样的另一个值不会被四舍五入。对于正在执行的环境,是否有一个常数或任何东西可以保证最接近“小于”或“大于”的可能表示形式的数值?

【问题讨论】:

  • 注意: 使用 Hamcrest,实际上有一些方便的边界情况测试方法,例如 greaterThan()。我建议将 Hamcrest 用于断言,因为它比 JUnit 断言更强大,并且它们生成更有用的断言失败消息,而无需手动编写字符串消息。 Hamcrest 断言/匹配器读起来也更像散文。

标签: java testing boundary


【解决方案1】:

Math.nextAfter (0.005, 0)?

返回浮点数 与第一个参数相邻 第二个参数的方向。如果 两个参数比较相等 返回第二个参数。

http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#nextAfter%28double,%20double%29

【讨论】:

  • 如果你犯了一个基本错误,比如使用浮点数来赚钱,测试对你没有帮助。
  • 虽然我普遍同意对于货币价值,floatdouble 应该像瘟疫一样避免,这对于更一般的情况非常有用,所以 +1。
  • 同意,对于这种特定情况,这不是一个好的选择,但这确实符合我所描述的一般意义。
【解决方案2】:

可能,但这取决于许多因素。对于货币值,您应该始终使用 BigDecimal,因为它可以让您完全控制精度(例如 doublefloat,即使对于简单的值也会产生奇怪的结果)

【讨论】:

  • 同意在这个例子中应该使用BigDecimal,但是我还没有在这个类中找到一个方法会返回一个相邻的值,就像上面的浮点示例一样。也许由于 BigDecimal 的性质,这是不可能的......
  • 使用BigDecimal,您可以指定“角落”的位置。如果你使用两位数的精度,那么这就是你得到的。没有必要测试相邻值,因为它们永远不会出现。此代码始终为真:value.setScale(2).compareTo(value) == 0
  • 好点,虽然“等于”当然不是问题所在。尽管如此, compareTo() == 1 或 -1 还是可以的。直到你指出来我才看到。我期待像 .lessThan() .greaterThan() 这样的方法
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多