Junit简介

来源:互联网 发布:七天网络阅卷公司 编辑:程序博客网 时间:2024/06/05 18:54
JUnit是一个Java语言的单元测试框架,由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

Junit的特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行期

这里我们简单介绍下Junit的环境配置,使用方法,具体深入的,请私下自己深入学习。

1、环境配置

1)在Eclipse中选中工程,右键“Properties”或是在菜单Project---Properties,打开项目配置的窗口,选择到Java Build Path。
2)右边的标签选择“Libraries”,点击“Add External JARS”按钮,然后选择Junit的jar包,点击“打开”按钮即将Junit使用的jar包添加到项目配置中;具体截图如下:

配置完毕后项目截图如下:


2、简单的使用

下面是一个java源代码文件,我们要做的就是针对它使用Junit完成单元测试:
package mytest1;public class Cal {private static int result;public void add(int n){result = result + n;}public void substract(int n){//bug:正确的应该是result=result-n;result = result -1;}public void multiply(int n){//方法没有写好,空方法}public void divide(int n) {        result = result / n;    }public void square(int n){result = n * n;}public void squareRoot(int n){//bug,这里是个死循环for(;;);}public void clear(){result = 0;}public int getResult(){return result;}}
分析过代码后,开始针对该文件中的方法做单元测试。
1)在项目中选中Cal.java,然后右键New--Junit Test Case,新建一个Junit testcase类:

2)单元测试的类,一般都是XXXXTest.java。修改文件名后,点击“Next”,接着选择需要测试的方法等,具体如下:


3)点击OK后,生成对应的代码,但是这个代码还需要修改和完善才能做到单元测试的功能。完善后的代码如下:

具体的文件如下:
package mytest1;import static org.junit.Assert.*;import org.junit.Before;import org.junit.Ignore;import org.junit.Test;public class CalTest {private static Cal cal = new Cal();@Beforepublic void setUp() throws Exception {cal.clear();}@Testpublic void testAdd() {cal.add(2);cal.add(3);assertEquals(5, cal.getResult());//fail("Not yet implemented");}@Testpublic void testSubstract() {cal.add(10);cal.substract(2);assertEquals(8, cal.getResult());//fail("Not yet implemented");}@Ignore("Multiply() not yet implemented")@Testpublic void testMultiply() {}@Testpublic void testDivide() {cal.add(8);cal.divide(2);assertEquals(4, cal.getResult());//fail("Not yet implemented");}@Test(expected = ArithmeticException.class)public void divideByZero(){cal.divide(0);}}
4)执行单元测试类:右键Run As----Junit test。执行结果如下:

5)从执行结果中可以看到哪些测试成功,哪些测试失败。测试失败的,在Failure Trace窗口中可以看到测试失败的原因

3、Junit测试类中注解的含义和执行顺序

通过上面代码编写,可以看到Junit测试类中方法前面会有@Test,@Before等字符。这个是Java编程中的注解。
Junit中注解的含义如下:
@是注解   @Test
表明下面是测试方法
@Test(timeout=200)
表示下面的测试是限时测试,如果超过规定的时间,就测试失败
@Test(expected=IllegalArgumentException.class)
异常测试,验证方法能否抛出预期的错误
@Ignore
注释掉一个测试方法或一个类,被注释的方法或类,不会被执行
@BeforeClass
修饰static的方法,在整个类执行之前执行该方法一次。
@AfterClass
同样修饰static的方法,在整个类执行结束前执行一次。如释放资源
@Before
修饰public void的方法,在每个测试用例(方法)执行时都会执行
@After
修饰public void的方法,在每个测试用例执行结束后执行

接着就是JUnit中方法的执行顺序和生命周期,通过上述表格,大家可以清楚看到执行的顺序,下面简单一个例子,编写后执行就可以看到执行的效果:
package com.hotelrestsys.frame.check_out;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class DayDialogTest {    @BeforeClass    public static void beforeclass(){        System.out.println("beforeclass");    }    @AfterClass    public static void afterclass(){        System.out.println("afterclass");    }    @Before    public void setUp() throws Exception {        System.out.println("before");    }    @After    public void tearDown() throws Exception {        System.out.println("after");    }    @Test    public void test1() {        System.out.println("test1");    }    @Test    public void test2(){        System.out.println("test2");    }}
运行结果如下:




0 0