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();
@Before
public void setUp() throws Exception {
cal.clear();
}
@Test
public void testAdd() {
cal.add(2);
cal.add(3);
assertEquals(5, cal.getResult());
//fail("Not yet implemented");
}
@Test
public void testSubstract() {
cal.add(10);
cal.substract(2);
assertEquals(8, cal.getResult());
//fail("Not yet implemented");
}
@Ignore("Multiply() not yet implemented")
@Test
public void testMultiply() {
}
@Test
public 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");
}
}
运行结果如下: