首先下载JUnit所需的jar包,这里我把3和4的jar包都下了一份。
新建一个java工程,在BuildPath里引入jar包并关联源码:
在src下建junit包,新建Calc类:
package junit;
public class Calc {
public int plus(int a, int b){
return a + b;
}
public int divide(int a, int b){
return a / b;
}
}
计算器实现了加法和除法,然后新建Source Folder,与src下的目录相同,建一个junit的包,包下新建CalcTest类继承TestCase类。
其实包路径,包名和类名这些都没有强制的规定,只是一种约定,新建一个叫test的Source Folder是为了将测试类和源码分离,相同的包名和类名后加Test可以让我么方便的找到相应类的测试类。
好了继续我们的CalcTest,先来测试plus方法。新建一个方法testAdd,方法必须是public void 的无参数方法,方法名以test开头,这是必须的,否则写的方法不会被测试。代码如下:
package junit;
import junit.framework.TestCase;
public class CalcTest extends TestCase {
public void testAdd() {
Calc calc = new Calc();
int result = calc.plus(3, 5);
assertEquals(8, result);
}
}
assertEquals方法可以接收各种类型的参数,不光是int型的。这个方法是比较两个参数是否有相同的值,其中第一个参数是你期望的值,第二个参数是实际得出的值。好了,运行一下看看。点右键,Run as => JUnit test,结果如下:
绿色的对勾表示期望值和实际得出的值是一样的,就是说count的值是8,那要是我们写成这样呢
assertEquals(9, count);
出错了,包括错误原因都很详细。
然后我们把参数改回正确的,再测试一下divide方法。
public void testDivide(){
Calc calc = new Calc();
int result = calc.divide(10, 3);
assertEquals(3, result);
}
结果很简单,就不截图了。至此Calc的两个方法都测试完了。
这里我们发现一个问题,每一个方法里面都会创建一个Calc对象,这显然是一项重复的动作。我们当然不能允许这样的事情存在。这时就该setUp方法出场了。
先声明一个类变量:
private Calc calc;
然后右键,Source,重写setUp方法。
在方法里面进行calc的初始化:
@Override
protected void setUp() throws Exception {
calc = new Calc();
}
这样JUnit在进行每个测试方法之前都会执行一下setUp方法进行calc的初始化。注意是在执行每个测试方法之前都会执行一次,因为每执行一个测试方法都会生成一个CalcTest对象。所以你定义的一些非static的类变量在每个方法之间是不能共用的。
现在每个测试方法的初始化工作都可以扔掉了。代码像下面这样:
package junit;
import junit.framework.TestCase;
public class CalcTest extends TestCase {
private Calc calc;
@Override
protected void setUp() throws Exception {
calc = new Calc();
}
public void testAdd() {
int result = calc.plus(3, 5);
assertEquals(8, result);
}
public void testDivide(){
int result = calc.divide(10, 3);
assertEquals(3, result);
}
}
有开始前就有结束后,tearDown方法就是在每个测试方法执行完毕后进行的善后工作,这里不再多说,大家试一下就知道。
有时候我们要执行多个测试类,那应该怎么做呢?显然一个一个点测试不是个好方法。我们可以在测试类的包上点右键,Run as => JUnit test,这样就会执行包下所有的测试类。那如果要执行其中的几个呢?这下就该TestSuit(测试套件)出场了。
我们把CalcTest复制一份,命名为CalcTest2吧,来模拟有多个测试类。然后新建一个类AllTest,写一个public static 的方法,名为suite,返回一个Test对象,这是必须的。代码如下:
package junit;
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTest {
public static Test suite() {
TestSuite suite = new TestSuite(AllTest.class.getName());
suite.addTestSuite(CalcTest.class);
suite.addTestSuite(CalcTest2.class);
return suite;
}
}
方法中我们定义了一个suite对象,并用addTestSuite方法将两个测试类都加入到suite中,最后返回suite对象。好了,执行一下:
两个测试类的都执行完了。suite对象还有addTest方法,可以添加一个Test对象,所以TestSuite是很灵活的,大家试一下。
JUnit3的最基础内容先到这里,下面接着看下JUnit4。
未完待续……………………