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

本文详细介绍了JUnit4单元测试框架的使用方法,包括如何编写测试用例、理解JUnit中重要概念、Junit3与Junit4的区别、Eclipse环境下使用JUnit4进行测试、编写规范、推荐材料等内容。

一.什么是Junit

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

二.Junit中重要的概念和类:

(1)TestCase

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

(2)TestSuit

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

(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 3Junit 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

转载于:https://my.oschina.net/u/2011901/blog/347543

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值