代码调试过程中容易遇到的问题

前两天身体有些不舒服,也没写啥新文章,昨天下了一天的雨,今天阳光明媚,空气也很新鲜,心情大好。

继翻译为什么输出是String而不是Object今天先写一下调试方面的东西。java中自带的函数调试是assert,也就是断言,是在java1.4引入的,下面回顾一下什么是断言。

断言(Assertions)是在Java 1.4引入的,到现在仍然是Java语言最有用并且最重要的附加功能之一。断言(Assertions)主要用于在程序中判断结果是否正确。断言(Assertions)测试条件是否是true值(又叫布尔表达示),当条件为false时通知开发人员。使用断言可以在代码的正确性上极大地提升你的信心。

实现断言:

断言是通过assert表达式和java.lang.AssertionError类来实现的。这个表达式以关键字assert开头,后跟着一个布尔表达式。assert表达式语法上表示如下:

assertBooleanExpr;

如果BooleanExpr为true,什么事都不会发生,执行会继续。但是,如果表达式为false,AssertionError会初始化并被抛出。如下清单1

/**
blog :www.marksaas.com
author :marksaas
*/
public class AssertDemo{
	public static void main(String[] args){
		int i=-1;
		assert i>=0;
	}
}


在Listing 1中的断言表明开发人员希望变量x包含一个大于等于0的值。然而,这显然是不正确的,这个断言表达式执行后会抛出AssertionError

编译清单1(javac AssertDemo.java),开启断言并执行(java -ea AssertDemo)。你应该可以看到下面的输出:


对于另外一种例子,不带-ea(enable assertions)参数执行AssertDemo将会没有任何输出。当断言没有启用时,尽管它们仍然存在classfile中,但它们并不会被执行。

在Junit测试 中断言的方法:

public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, Object[] actual)

是JUnit 4 为比较数组添加的两个 assert() 方法.这两个方法以最直接的方式比较数组:如果数组长度相同,且每个对应的元素相同,则两个数组相等,否则不相等。数组为空的情况也作了考虑。 .

常用断言介绍:

1. assertEquals([String message],Object target,Object result)  target与result不相等,中断测试方法,输出message
assertEquals(a, b) 测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
例如计算器加法功能的测试可以使用一下验证:
Assert.assertEquals(0,result);

2. assertTrue/False([String message],Boolean result) Result为 false/true,中断测试方法,输出message
assertTrue 断言条件为真,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertFalse 断言条件为假,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertFalse(a) 测试a是否为false(假),a是一个Boolean数值;

3. assertNotNull/Null([String message],Obejct result )  Restult == null/result!=null,中断测试方法,输出message
assertNull   断言对象为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotNull 断言对象不为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotNull(a) 测试a是否非空,a是一个对象或者null;

4.assertSame/NotSame(Object target,Object result) Traget与result 不指向/指向 同一内存地址(实例),中断测试方法,输出message
assertSame 断言两个引用指向同一个对象,若不满足,方法抛出带有相应信息AssertionFailedError异常。
assertNotSame 断言两个引用指向不同对象,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertNotSame(a, b) 测试a和b是否没有都引用同一个对象;

5. fail([String message])  中断测试方法,输出message
Fail  让测试失败,并给出指定信息。

欢迎关注我的微博  ,我的微博会实时更新文章。  交流群:

199326422

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章