JUNIT3.8使用详解

一:junit 3.8使用原则

测试类必须要继承与TestCase父类;

测试方式需要满足如下原则:
    1)public的

    2)void的

    3)无方法参数
    4)方法名称必须以test开头
Test Case之间一定要保持完全的独立性,不允许出现任何的依赖关系。

使用Assert中的各类assert方法,在测试代码不会执行的地方插入Assert.fail()方法
我们不能依赖于测试方法的执行顺序。
测试之前是什么状态,测试执行完毕后就应该是什么状态,而不应该由于测试执行的原因导致状态发生了变化。

二:使用Junit的最佳实践
1) 新建一个名为test的source folder,用于存放测试类源代码
2) 目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面
3) 测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest

三:关于setUp与tearDown方法的执行顺序:框架会先执行setUp,然后执行测试的方法(比如TestCase中的testAdd()),然后再执行tearDown方法。

四、执行方式:

1)使用ide比如eclipse自带的gui运行框架,右键执行。

2)使用脚本调用:

 junit.textui.TestRunner.run(CalculatorTest.class);//使用控制台执行
 junit.awtui.TestRunner.run(CalculatorTest.class);//调用junit自身的gui界面执行

五、实现案例:

待测试类Calculator:

package test;

//实现整数的加、减、乘、除

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int subtract(int a, int b) {
        return a - b;
    }
    
    public int multiply(int a, int b) {
        return a * b;
    }
    
    public int divide(int a, int b) throws Exception {
        if(0 == b)
            throw new Exception("除数不能为0");
        return a / b;
    }
   
}

 

待测试类DeleteAll:

package test;

import java.io.File;

//实现删除某一个文件或者某一个目录下的所有文件

public class DeleteAll
{
    public static void deleteAll(File file)
    {
        if(file.isFile() || file.list().length == 0)
        {
            file.delete();
        }
        else
        {
            File[] files = file.listFiles();
            
            for(File f : files)
            {
                deleteAll(f);
                
                f.delete();
            }
        }
    }
}
 


测试类:CalculatorTest

package test;

import junit.framework.Assert;
import junit.framework.TestCase;
 

public class CalculatorTest extends TestCase {
    
    private Calculator cl;
    
    public CalculatorTest(String name) {
        super(name);
    }
    @Override
    protected void setUp() throws Exception {
        System.out.println("set up");
        cl = new Calculator();
    }
    
    @Override
    protected void tearDown() throws Exception {
        System.out.println("tear down");
    }
    
    
    public void testAdd() {
        int result = cl.add(1, 2);
        Assert.assertEquals(3, result);
    }
    
    public void testSubtract() {
        int result = cl.subtract(1, 2);
        Assert.assertEquals(-1, result);
    }
    public void testMultiply() {
        int result = cl.multiply(3, 2);
        Assert.assertEquals(6, result);
    }
    
    public void testDivide() {
        int result = 0;
        try {
            result = cl.divide(6, 2);
            
        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail();
        }
        Assert.assertEquals(3, result);
    }
    
    public void testDivideDivideByZero() {
        Throwable tx = null;
        
        try {
            cl.divide(6, 0);
            Assert.fail("测试失败");
        } catch (Exception e) {
            tx = e;
        }
        Assert.assertEquals(Exception.class, tx.getClass());
        Assert.assertEquals("除数不能为0", tx.getMessage());
    }
    }

package test;

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

批量执行测试案例,使用测试套件TestSuite

package test;

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestAll extends TestCase{
    public static Test suite() {
        //新建一个测试套件
        TestSuite suite = new TestSuite();
        //装载CalculatorTest类,将执行CalculatorTest类中的所有测试案例
        suite.addTestSuite(CalculatorTest.class);
        suite.addTestSuite(LargestTest.class);
        suite.addTestSuite(DeleteAllTest.class);
        //表示将CaculatorTest类中的testSubtract执行20次
        suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 20));
        return suite;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章