JUnit学习笔记

来源:互联网 发布:thinkphp旅游网站源码 编辑:程序博客网 时间:2024/05/03 04:54

首先下载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的初始化:

@Overrideprotected 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;@Overrideprotected 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。

未完待续……………………

原创粉丝点击