1

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

  1. assert失败时抛出异常
  2. 打印堆栈跟踪,否则在assert失败时继续
  3. 忽略一个assert

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

谢谢。

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

4

3 回答 3

4

似乎您想为此使用单元测试而不是 Java 的内置assert. 看看JUnit可以为您和您的团队做些什么。

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

于 2012-08-29T00:45:14.260 回答
0

你可以很容易地实现#2,因为assert抛出一个AssertionError.

try {
  assert false;
} catch (final AssertionError error) {
  error.printStackTrace();
}
System.out.println("survived!");
于 2012-08-29T01:07:05.647 回答
0

你不能,不使用Assert. Assert专为失败而设计,不容忽视。

于 2012-08-29T00:42:44.533 回答