JUnit中Failure、Error区别
来源:互联网 发布:谷嫂淘宝店叫什么名字 编辑:程序博客网 时间:2024/06/04 18:41
在运行TestRunner执行您的测试时,您会发现到有Failure与Error两种测试尚未通过的讯息。
Failure指的是预期的结果与实际运行单元的结果不同所导致,例如当您使用assertEquals()或其它assertXXX()方法断言失败时,就会回报Failure,这时候您要检查您的单元方法中的逻辑设计是否有误。
Error指的是您程式没有考虑到的情况,在断言之前程式就因为某种错误引发例外而终止,例如在单元中存取某个阵列,因为存取超出索引而引发ArrayIndexOutOfBoundsException,这会使得单元方法无法正确完成,在测试运行到asertXXXX()前就提前结束,这时候您要检查您的单元方法中是否有未考虑到的情况而引发流程突然中断。
来看个实际的例子,如果您设计了下面的测试案例:
ObjectArrayTest.java
package onlyfun.caterpillar.test;
import onlyfun.caterpillar.ObjectArray;
import junit.framework.TestCase;
public class ObjectArrayTest extends TestCase {
public void testAdd() {
ObjectArray objArr = new ObjectArray();
Object testObj = new Object();
Object obj = objArr.setObject(0, testObj);
assertEquals(testObj, obj);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(ObjectArrayTest.class);
}
}
然后根据这个测试案例,您撰写了ObjectArray类别:
ObjectArray.java
package onlyfun.caterpillar;public class ObjectArray { private Object[] objs; public Object setObject(int i, Object o) { return objs[i]; }}
接下来运行TestRunner,您发现程式回报了Error:
.E
Time: 0
There was 1 error:
1) testAdd(onlyfun.caterpillar.test.ObjectArrayTest)
java.lang.NullPointerException
....
....
FAILURES!!!
Tests run: 1, Failures: 0, Errors: 1
仔细看一下您所设计的ObjectArray类别,显然程式撰写的太勿忙,忘了初始化Object阵列了,因而引发了 NullPointerException,这是程式设计上的错误,使得尚未进行断言之前就引发例外中断,所以修正一下ObjectArray,提供一个建构函式,预设产生长度为10的阵列:
ObjectArray.java
package onlyfun.caterpillar;
public class ObjectArray {
private Object[] objs;
public ObjectArray() {
objs = new Object[10];
}
public Object setObject(int i, Object o) {
return objs[i];
}
}
再运行一次TestRunner,这次Error没了,但是有Failure:
.F
Time: 0
There was 1 failure:
1) testAdd(onlyfun.caterpillar.test.ObjectArrayTest)
junit.framework.AssertionFailedError:
expected:<java.lang.Object@10b30a7> but was:
....
....
FAILURES!!!
Tests run: 1, Failures: 1, Errors: 0
这表示可以执行到assertEquals()完毕,但是断言失败,所以再设计程式以消除Failure:
ObjectArray.java
package onlyfun.caterpillar;
public class ObjectArray {
private Object[] objs;
public ObjectArray() {
objs = new Object[10];
}
public Object setObject(int i, Object o) {
objs[i] = o; return objs[i];
}
}
再次运行TestRunner,这次应该可以通过测试了。
如果您的单元在执行时,使用throws声明会丢出某些例外,例如IOException,您希望可以在testXXXX()中测试例外是否真的被丢出,您可以使用try.....catch来处理,下面这个程式是个实例,假设java.io.FileReader是您所设计的类别,您提供一个测试档案 test.txt:
FileReaderTest.java
package onlyfun.caterpillar.test;
import java.io.*;
import junit.framework.TestCase;
public class FileReaderTest extends TestCase {
public void testClose() throws IOException {
FileReader reader = new FileReader("test.txt");
reader.close();
try {
reader.read();
fail("reading file after closed" + " and didn't throw IOException");
}
catch(IOException e) {
assertTrue(true);
}
}
public static void main(String[] args) {
junit.textui.TestRunner.run(FileReaderTest.class);
}
}
您所测试的可能是一个预期会丢出的例外,您想要看看当错误的情况成立时,是不是真会丢出例外,例如 testClose() 测试FileReader 在close()之后如果再read(),是不是会如期丢出IOException,您先行在方法中用try....catch捕捉了这个例外,如果没有如期丢出例外,则不会被catch捕捉,而程式流程继续往下,执行到 fail() 陈述,这表示例外处理没有发生,此时主动丢出一个Failure,表示程式的执行并不如您所预期的。
- JUnit中Failure、Error区别
- JUnit 中 failure 和 error 的区别
- junit中failure和error的区别
- Failure,Error,Fault之间的区别
- Junit 的error 和failer 的区别
- fault,error和failure的区别与联系
- ERROR: Checksum failure
- CreateProcess failure, error 2
- installation error: unknown failure
- junit中before和beforeclass区别
- junit中before和beforeclass区别
- Junit 中after与afterclass 区别
- JUnit的Failure Trace的一个问题
- 计算机术语——fault、failure、exception和error的区别
- VS2010MFC工程中fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
- junit中 assertEquals与assertSame用法的区别
- Substitution Failure Is Not An Error
- ERROR: Failure processing PNG image in Android
- 把Excel中的数据以特定的方式放入txt
- hdoj 1950 Bridging signals
- 【原文件】tinyxml.cpp
- Smart_ptr源码剖析和问题探究
- 实现软键盘弹出时,可以在软键盘上方通过滑动显示Activity从上到下任意位置
- JUnit中Failure、Error区别
- [leetcode 97]Interleaving String
- android 读取原始(Raw)资源 作为数据库文件
- hdu 1080 Human Gene Functions
- mac各种快捷键汇总
- 无root手机版抓android包工具,超好用
- hdu 2199 Can you solve this equation?
- Qt 鼠标右击菜单建立
- 【原文件】tinyxmlerror.cpp