Junit TestCase

来源:互联网 发布:飞飞cms官网是哪个 编辑:程序博客网 时间:2024/04/30 01:22

 1、将junit的jar包放在工程的classpath中
2、创建Junit Test Case,其类继承自junit.framework.TestCase,选择要测试的类,点击“下一步”,选择所要测试的类的方法,在写测试方法时要遇到assert的一系列方法判断测试结果正确与否(测试类的测试方法应该以test开头,必须是public void,并且无参的):
如:
原类:
public class SampleCalculator { 
public int add(int augend, int addend) { 
      return augend + addend; 
    } 
    public int subtration(int minuend, int subtrahend){ 
        return minuend - subtrahend; 
    } 
}
测试类:
import junit.framework.TestCase; 
public class TestSample extends TestCase { 
public void testAdd() { 
SampleCalculator calculator = new SampleCalculator(); 
        int result = calculator.add(50, 20); 
        assertEquals(70, result); 
    } 
    public void testSubtration() { 
        SampleCalculator calculator = new SampleCalculator(); 
        int result = calculator.subtration(50, 20); 
        assertEquals(30, result); 
    } 
}
3、后以Junit Test方式运行,如果运行结果显示绿色则单元测试通过,若为红色则测试失败。
注意:在JUnit中的初始化是建议在Setup方法中作的,在运行图中有Erros,Failures统计。
Failures作为单元测试所期望发生的错误,它预示你的代码有bug,不过也可能是你的单元测试代码有逻辑错误(注意是逻辑错误)。Errors不是你所期待的,发生了Error你可以按照下面的顺序来检查:
检查测试所需的环境,如:数据库连接,检查单元测试代码,检查你的系统代码

4、成批运行test case
import junit.framework.Test; 
import junit.framework.TestSuite; 
public class TestAll { 
    public static TestSuite suite() { 
        TestSuite suite = new TestSuite("TestSuite Test"); 
        //添加junit测试类 
        suite.addTestSuite(TestSample.class); 
        return suite; 
    } 
}
5、JUNIT给出了3种方式表示TestRunner
junit.swingui.TestRunner
junit.awtui.TestRunner
junit.textui.TestRunner

  6、在Junit中testcase继承了TestCase的setUp()和tearDown()两个方法,一个是初始化,一个是撤销初始化。
@Override
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
//初始化
}

@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
//撤销初始化
}

执行顺序:setUp()——》testXX()方法1——》tearDown()——》setUp()——》testXX()方法2——》tearDown()

7、以下为JUNIT简单测试样例1. package junit.sineat.templet;  
import java.util.Hashtable;  
import junit.framework.Assert;  
import junit.framework.TestCase;  
import junit.framework.TestSuite;  
 
public class JunitB extends TestCase{  
    /**定义你需要测试的类及用到的变量*****************************/ 
    public Hashtable hasha=null;//  
    public Hashtable hashb=null;  
    /*******************************************************/     
    public JunitB(String name){       
        super(name);//创建子类        
    }  
    /**用setUp进行初始化操作*/ 
    protected void setUp() throws Exception {  
        super.setUp();  
        hasha =new Hashtable();//这里   
    }  
    /**用tearDown来销毁所占用的资源*/ 
    protected void tearDown() throws Exception {  
        super.tearDown();  
        //System.gc();  
    }  
    /**写一个测试方法断言期望的结果**/ 
    public void testBodyStatus() {    
        //hasha =new Hashtable();//有此句后也可去掉setUp() tearDown()  
        assertNotNull(hasha);         
        //hasha.put("0","let's try again");//test1.error版  
        assertTrue(hasha.isEmpty());//期望为空        
    }  
    /**再写一个测试方法断言期望的结果**/ 
    public void testBodySame() {          
        //hashb=(Hashtable)hasha.clone();   //test2.error版  
        hashb=hasha;                        //test2.OK 版  
        Assert.assertSame(hasha,hashb);       
    }  
    /**suite()方法,使用反射动态的创建一个包含所有的testXxxx方法的测试套件**/ 
    public static TestSuite suite()  {  
        return new TestSuite(JunitB.class);  
    }  
    /****写一个main()运行测试*****************/ 
    public static void main(String args[]) {  
        junit.textui.TestRunner.run(suite());//以文本运行器的方式方便的       
        //junit.swingui.TestRunner.run(JunitB.class);  
    }  
}  
注意:一、不要在测试用例的构造函数中做初始化
    答案是重载测试用例的setUp()方法进行初始化。
二、不要假定测试用例中测试的执行次序
    好的习惯是保持测试之间的独立性,使得它们在任何次序下执行的结果都是相同的。
三、测试要避免人工干预
    经验二讲的是不同的测试要避免相关性,而经验三讲的其实就是测试要避免自相关。
四、在子类中调用父类的setUp() 和tearDown()
五、不要硬性规定数据文件的路径
六、把测试的代码和被测的代码放在同样的目录下
七、正确命名测试
八、书写测试时要考虑地区和国家设置
九、利用Junit 的自动异常处理书写简洁的测试代码
     事实上在Junit 中使用try-catch 来捕获异常是没有必要的,Junit 会自动捕获异常。那些没有被捕获的异常就被当成错误处理。
十、充分利用Junit 的assert/fail 方法
     assertSame()用来测试两个引用是否指向同一个对象
     assertEquals()用来测试两个对象是否相等
十一、确保测试代码与时间无关
十二、使用文档生成器做测试文档。

8、JUNIT的好处、编写原则、特征及框架组成
好处:
A、可以使测试代码与产品代码分开。
B、针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。
C、易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发。
D、JUnit是公开源代码的,可以进行二次开发。
C、可以方便地对JUnit进行扩展。
编写原则:
    A、是简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。
B、是使测试单元保持持久性。
C、是可以利用既有的测试来编写相关的测试。
3.2、JUnit的特征
    A、使用断言方法判断期望值和实际值差异,返回Boolean值。
B、测试驱动设备使用共同的初始化变量或者实例。
C、测试包结构便于组织和集成运行。
D、支持图型交互模式和文本交互模式。
3.3、JUnit框架组成
A、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。
B、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。
C、测试结果的描述与记录。(TestResult) 。
D、测试过程中的事件监听者(TestListener)。
E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)
F、JUnit Framework中的出错异常(AssertionFailedError)。
9、JUNIT中常用的接口和类:
3.5、JUnit中常用的接口和类
Test接口——运行测试和收集测试结果
Test接口使用了Composite设计模式,是单独测试用例 (TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。
它的public int countTestCases()方法,它来统计这次测试有多少个TestCase,另外一个方法就是public void run( TestResult ),TestResult是实例接受测试结果, run方法执行本次测试。
TestCase抽象类——定义测试中固定方法
TestCase是Test接口的抽象实现,(不能被实例化,只能被继承)其构造函数TestCase(string name)根据输入的测试名称name创建一个测试实例。由于每一个TestCase在创建时都要有一个名称,若某测试失败了,便可识别出是哪个测试失败。
TestCase类中包含的setUp()、tearDown()方法。setUp()方法集中初始化测试所需的所有变量和实例,并且在依次调用测试类中的每个测试方法之前再次执行setUp()方法。tearDown()方法则是在每个测试方法之后,释放测试程序方法中引用的变量和实例。
开发人员编写测试用例时,只需继承TestCase,来完成run方法即可,然后JUnit获得测试用例,执行它的run方法,把测试结果记录在TestResult之中。
Assert静态类——一系列断言方法的集合
Assert包含了一组静态的测试方法,用于期望值和实际值比对是否正确,即测试失败,Assert类就会抛出一个 AssertionFailedError异常,JUnit测试框架将这种错误归入Failes并加以记录,同时标志为未通过测试。如果该类方法中指定一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息,告诉测试人员改异常的详细信息。
JUnit 提供了6大类31组断言方法,包括基础断言、数字断言、字符断言、布尔断言、对象断言。
其中assertEquals(Object expcted,Object actual)内部逻辑判断使用equals()方法,这表明断言两个实例的内部哈希值是否相等时,最好使用该方法对相应类实例的值进行比较。而 assertSame(Object expected,Object actual)内部逻辑判断使用了Java运算符“==”,这表明该断言判断两个实例是否来自于同一个引用(Reference),最好使用该方法对不同类的实例的值进行比对。asserEquals(String message,String expected,String actual)该方法对两个字符串进行逻辑比对,如果不匹配则显示着两个字符串有差异的地方。ComparisonFailure类提供两个字符串的比对,不匹配则给出详细的差异字符。
TestSuite测试包类——多个测试的组合
TestSuite类负责组装多个Test Cases。待测得类中可能包括了对被测类的多个测试,而TestSuit负责收集这些测试,使我们可以在一个测试中,完成全部的对被测类的多个测试。
TestSuite类实现了Test接口,且可以包含其它的TestSuites。它可以处理加入Test时的所有抛出的异常。
TestSuite处理测试用例有6个规约(否则会被拒绝执行测试)
        A 测试用例必须是公有类(Public)
        B 测试用例必须继承与TestCase类
        C 测试用例的测试方法必须是公有的( Public )
        D 测试用例的测试方法必须被声明为Void
        E 测试用例中测试方法的前置名词必须是test
        F 测试用例中测试方法误任何传递参数
n       TestResult结果类和其它类与接口
TestResult结果类集合了任意测试累加结果,通过TestResult实例传递个每个测试的Run()方法。TestResult在执行TestCase是如果失败会异常抛出
TestListener接口是个事件监听规约,可供TestRunner类使用。它通知listener的对象相关事件,方法包括测试开始 startTest(Test test),测试结束endTest(Test test),错误,增加异常addError(Test test,Throwable t)和增加失败addFailure(Test test,AssertionFailedError t)
TestFailure失败类是个“失败”状况的收集类,解释每次测试执行过程中出现的异常情况。其toString()方法返回“失败”状况的简要描述.

原创粉丝点击