在Java中,有三种处理错误的机制:抛出一个异常,日志,使用断言。
断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句将会被自动地移走。
断言只应用在测试阶段确定程序内部的错误位置。
assert有两种形式:
1.不要使用断言验证公共方法的参数。
2.可以使用断言验证私有方法的参数。
3.不要使用断言验证命令行参数
4.在公共方法内,可以使用断言检查从不会发生的情况
5.不要使用可能产生副作用的断言,也就是断言表达式应该使程序保持在进入它之前的状态。
例如一道题目:
QUESTION 43
Given:
11. public void go(int x) {
12. assert (x > 0);
13. switch(x) {
14. case 2: ;
15. default: assert false;
16. }
17. }
18. private void go2(int x) { assert (x < 0); }
Which statement is true?
A. All of the assert statements are used appropriately.
B. Only the assert statement on line 12 is used appropriately.
C. Only the assert statement on line 15 is used appropriately.
D. Only the assert statement on line 18 is used appropriately.
E. Only the assert statements on lines 12 and 15 are used appropriately.
F. Only the assert statements on lines 12 and 18 are used appropriately.
G. Only the assert statements on lines 15 and 18 are used appropriately.
选择D。
对于第12行,assert不能检测公共方法的参数,违反了原则4
15行,assert肯定会发生,不会回到之前的状态,违反了原则5
18行符合原则2。
参考资料:http://tanjunxiaoge.iteye.com/blog/1756186