java的断言语句是否允许您指定消息?

All*_*nde 61 java assert

似乎在断言失败时断言显示消息可能有用.

当前AssertionError被抛出,您可以为它指定自定义消息吗?

你能展示一个这样做的机制(除了创建自己的异常类型并抛出它)吗?

Gre*_*ill 135

你当然可以:

assert x > 0 : "x must be greater than zero, but x = " + x;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅使用断言编程.


mat*_*rns 17

assert (condition) : "some message";
Run Code Online (Sandbox Code Playgroud)

我建议把条件放在括号中

assert (y > x): "y is too small. y = " + y;
Run Code Online (Sandbox Code Playgroud)

想象一下,如果你遇到这样的代码......

assert isTrue() ? true : false : "some message";
Run Code Online (Sandbox Code Playgroud)

不要忘记这与您在JUnit中编写的断言无关.

  • 将括号中的每个表达式包装起来都没有意义,因为三元组会因此而略微混乱.如果你碰巧有一个三元表达作为你的断言,你可以包装它.(虽然我认为如果你有一个三元表达式作为你的断言,你可能搞砸了,至少你应该将表达式提取到一个命名的方法调用中以保持清晰.) (2认同)

Jas*_*oco 11

绝对做到了:

assert importantVar != null : "The important var was null!";
Run Code Online (Sandbox Code Playgroud)

这将向抛出的异常添加"重要的var为null".


Bil*_*ard 6

如果你使用

assert Expression1 : Expression2 ;
Run Code Online (Sandbox Code Playgroud)

Expression2用作AssertionError的详细消息.