java断言无一例外



我们有一些java代码,理想情况下希望以三种方式运行:

  1. assert失败时引发异常
  2. 打印堆栈跟踪,但在assert失败时继续
  3. 忽略assert

这将在三个不同的环境中运行(分别是开发、测试和生产)。我们可以使用-eaJVM选项在第一个和最后一个之间切换,但是否可以进行第二个?

谢谢。

编辑:我们已经到处都有断言语句了。我们更喜欢在运行时更改此选项,而不更改代码。

您似乎想要使用单元测试来实现这一点,而不是Java的内置assert。看看JUnit能为你和你的团队做些什么。

您可以设置要运行的测试,它们会通知您失败。如果需要堆栈跟踪,可以通过引发/捕获异常来创建自己的堆栈跟踪,然后使用e.printStackTrace()

不能,不使用AssertAssert是专门为失败而设计的,不容忽视。

您可以很容易地实现#2,因为assert抛出AssertionError

try {
  assert false;
} catch (final AssertionError error) {
  error.printStackTrace();
}
System.out.println("survived!");

最新更新