工欲善其事必先利其器-------Junit的使用

一.什么是Junitjavascript

Junit是一个开源的Java测试框架,用于编写和运行重复的使用的测试用例,它是由<<设计模式:可复用面向对象软件的基础>的>做者Erich Gamma和Kent Beck开发的。java

二.Junit中重要的概念和类:设计模式

(1)TestCaseapi

当一个类继承自TestCase,即成为一个测试类,它包含有testXXXX形式的测试方法。框架

(2)TestSuiteclipse

将相关的测试纳入一组,将多个测试方法纳入一个test suit。若是没有编写test Suit的话,系统会默认为每一个test case生成一个test Suite。ide

(3)Test Runner函数

用于执行TestSuit。单元测试

(4)TestResult测试

用用包含测试中发生的错误,次数等。

(5)Assert

用于检测条件是否成立。

常见有以下几个:

断言方法 说明
assertTrue/False 判断条件是true仍是false
assertEquals() 判断是否相等
assertNotNull()/Null() 判断对象是否为空
assertSame()/NotSame() 判断两个对象是否指向同一个对象
fail() 失败
failNotSame/failNotEquals 当不指向同一个内存地址或者不相等的时候,输出错误信息

三.编写测试用例的流程:

(1)建立继承自TestCase类的测试类

(2)编写测试方法通常都是固定模式public void testXXXX();

(3)建立testSuit并将(1)中编写的TestCase添加到testsuit;

(4)运行TestRunner对TestSuit进行测试。

这里要介绍两个有用的方法:

setup()/tearDown()

setup:在每次执行测试方法以前,该方法都会被执行,一般在这里进行一些固定的工做

tearDown():每次测试方法执行结束的时候,这个方法都会被执行一次,一般在这里执行一些收尾工做。

四.Junit3 与Junit4的区别,及Junit4新特性

Junit 3 Junit 4
必须引入junit.framework.TestCase

必须引入

import static org.junit.Assert.*;

import org.junit.Test;

必须继承TestCase 不需继承TestCase
测试方法必须使用test开头 不须要可是必须加上@test注释,可是返回值必须是void类型,而且不能带参数。
还可使用@Test(timeout=100)给测试函数设定一个执行时间,超过了这个时间,它们就会被系统强行终止,而且系统还会汇报该函数结束的缘由是由于超时。
使用@Test(excepted=IllegalArgumentException.class)测试指望的异常,若是没有发现异常或者抛出的异常不是指望的就测试失败。
   
setUp名字不能变(覆盖父类的方法) 使用@Before,方法名称随意
tearDown名称不能变 使用@After:方法名可变

Junit新增长特性:

@BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("BeforeClass");
    }

//在全部测试方法包括Before以前执行,只执行一次

@AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("tearDownAfterClass");
    }

//在全部测试方法包括After以后执行,只执行一次

综上所述Junit4的单元测试用例执行顺序为

@BeforeClass->@Before->@Test方法1->@After->@Before->@Test方法2->@After—>@AfterClass

Junit4没有设置Test Suit,它使用@RunWith以及@SuitClasses来替代。

以下所示:

package com.example.ForTestClass.junit;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

JUnit 中全部的测试方法都是由运行器负责执行的。 JUnit 为单元测试
提供了默认的测试运行器,但 JUnit并不必定须要使用 默认的运行器。咱们不只能够经过继承org.junit.runner.Runner定制本身
运行器而且还能够为每个测试类指定使用某个具体的运行器。制定方法以下:

@RunWith(Suite.class)//提示Junit将此类做为指定运行器

在实际项目中每每单元测试类会不少, JUnit 提供了一种批量运行测试
类的方法,叫作测试套件。也就是上面所说的Test Suit。这样每次须要验证系统功能正确性时,只执行一个或几个测试套件即可以了。
@SuiteClasses({ ClassForTestTest.class, ClassForTestTests.class })添加测试类

public class AllTests {

}

@Ignore用于暂时忽略某个测试方法,由于有时候因为测试环境受限,并不能
保证每个测试方法都能正确运行。

@Ignore("Multiply() Not yet implemented")
    @Test
    public final void test() {
    }

参数化测试:

在测试的时候会遇到一种状况就是须要模拟不一样的参数对方法进行测试,可是为不一样的参数建立一个测试方法是不大现实的,这时候可使用参数化测试机制来解决这个问题。

以下例子所示

@RunWith(Parameterized.class) public class CalculateTest2 {
    Calculate calculate;
    private int input1;
    private int input2;
    private int expected;
    @Parameters
    public static Collection prepareData() {
        Object[][] object = { { -1, -2, -3 }, { 0, 2, 2 }, { -1, 1, 0 },
                { 1, 2, 3 } };
        return Arrays.asList(object);
    }

    public CalculateTest2(int input1, int input2, int expected) {
        this.input1 = input1;
        this.input2 = input2;
        this.expected = expected;
    }

    @Before
    public void setUp() throws Exception {
        calculate = new Calculate();
    }

    @Test
    public void testAdd() {
        int result = calculate.add(input1, input2);
        assertEquals(expected, result);
    }
}
五.Eclipse下使用Junit4

下面就以eclipse下的Junit 4为例说明如何使用Junit进行测试:

建立一个项目,编写待测试的类ClassForTest以下图所示:

tmp575

ClassForTest.java的源码以下所示:

package com.example.ForTestClass;

public class ClassForTest {
    public int add(int a,int b){
        return a+b;
    }
    public double divide(int a,int b){
        return a/b;
    }
}

选中ClassForTest.java右击New –>Others出现下面的对话框选中Junit Test Cass

tmp576

tmp577

出现上面的界面后点击next,

选中待测试的方法:

tmp578

点击Next,提示是否将Junit添加到编译路径?点击OK。它将自动产生以下代码:

tmp579

选中ClassForTestTest.java右击选中new—>Junit Test Suit出现以下界面:

tmp57A

点击next选中要添加到TestSuit中的类:

tmp57B

点击finish

选中刚刚建立的Test Suit右击run As Junit Test 查看结果:

tmp57C

 

六.一些编写规范

(1)测试代码应单独位于一个Source Folder下通常命名为test,而且在该Source Folder下所处的包名最好与待测试类同名。

(2)测试方法名格式test+待测试方法名+简要描述(可选)

(3)测试类名格式待测试类名+Test

(4)多使用一些带消息的标签,这样能够定位出错误的缘由

assertEquals("ClassForTestTestss测试出错"+result+":"+expect, result, expect);

七.推荐材料:

Junit4 文档

http://tool.oschina.net/apidocs/apidoc?api=junit-4.10

Open文档网站下的资源:

http://www.open-open.com/doc/list/194

相关文章
相关标签/搜索