在上一讲,我们编写了一个简单的测试类CaculatorTest 类,来对类Caculator进行测试。我们写好了测试类,然后点击eclipse中的“Run as -> JUnit Test”,就会得到相应的测试结果。
现在的问题是,我们并不想每次总是点击eclipse中的
“Run as -> JUnit Test”,这样太麻烦了,不便于我们自动化测试及收集,测试运行器 恰恰提供了我们这个功能,见下图。
首先编写一个简单的类 Halo.java。
public class Halo {
public int say(){
int[] a = new int[3];
return a[3];
}
public String speak(){
return ("s");
}
public String present(){
return "p";
}
}
然后编写测试类 HaloTest.java。
import org.junit.*;
public class HaloTest {
Halo h = new Halo();
@Test
public void testsay(){
int res = h.say();
Assert.assertEquals(1, res);
}
@Test
public void testspeak(){
String res = h.speak();
Assert.assertEquals("s", res);
}
@Test
public void testpresent(){
String res = h.present();
Assert.assertEquals("p", res);
}
}
于是继续探究 JUnit,找到了重要的东西 测试运行器 JUnitCore,我们为了执行测试类HaloTest,声明创建Result对象,用Failure对象来记录测试用例失败的信息,代码如下
Result res = JUnitCore.runClasses(HaloTest.class); // 执行HaloTest文件
System.out.println(res.wasSuccessful()); // 返回是否全部通过测试用例
for(Failure failure:res.getFailures()){
System.out.println(failure.getTrace());
}
执行上述代码,就相当于调用并执行了 HaloTest.class 文件,结果如下
可以看出,“false”表示测试类 HaloTest 运行失败,具体的 failure 有1个,也就在执行 HaloTest 中的 testsay时,发生了错误。
报错信息为“ArrayIndexOutOfBoundsException”,找到 Halo类的第19行,发现是调用的值,超出了数组的长度(当然了,对a也没有赋值)。
return a[3];
// Halo.java 第19行