如何结合Java断言和(JUnit)测试公共后置条件?

时间:2013-03-30 13:18:06

标签: java unit-testing testing assert design-by-contract

我阅读了有关Java的断言的Oracle建议,并且它说你也应该使用assert来处理公共后置条件 (http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#postconditions)。

我如何将此断言与自动化测试相结合,实际上也会进行此检查?

实施例: 在调用类“Stack”的“push”方法之后,您要检查堆栈现在是否为空。你可以使用assert,你可以使用测试。

有没有最好的做法,我可以做两件事,单位测试用更多的支票,但无论如何我会做两次,这似乎不太好。

我已经阅读了这些问题:

https://softwareengineering.stackexchange.com/questions/18288/are-asserts-or-unit-tests-more-important

assert vs. JUnit Assertions

1 个答案:

答案 0 :(得分:3)

编码断言的决定是实现选择 在打开断言的情况下运行JVM的决定是运行时选择。

JUnit测试应测试行为,无论实现或运行时选择如何。

要清楚,答案是您的JUnit测试应该断言(通过代码)方法具有预期的结果。如果代码中的断言有效地执行相同的操作,则这是无关紧要的,不应该依赖于不写相应的JUnit测试的理由,因为:

  • 编写实现的人可以完全自由地删除断言语句
  • JVM可能无法(永远)运行断言