Junit学习总结



什么是单元测试?

单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。

单元测试是个听起来高大上的话题,貌似只有白盒测试或开发人员才能胜任这项工作。其实,它并没有想象的那么高级。

什么是单元测试框架?

对于单元测试框架来讲,它主要完成以下几件事。

提供用例组织与执行: 当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,需要考虑用例的规范与组织 问题了。单元测试框架就是用来解决这个问题的。。

提供丰富的断言方法: 不论是功能测试,还是单元测试,在用例执行完成之后都需要将实际结果与进行预期结果的进行比较(断言),从而断定用例是否执行通过。单元测试框架一般会提供丰富的断言方法。例如,判断相等/不等、包含/不包含、True/False的断言方法等。

提供丰富的日志: 当测试用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如,总执行时间、失败用例数、成功用例数等。

从这些特性来看单元测试框架的作用是:帮助我们更自动化测试完成测试,所以,它是自动化测试的基础。

IntelliJ IDEA 安装 Junit

1、下载 junit-4.12.jar 文件:https://github.com/junit-team/junit4/releases

2、 打开 IntelliJ IDEA ,菜单栏:File菜单 –> Porject Structure 选项 –> Dependencies 标签 –> 点击 “+” 号 –> Library… –> Java 。 选择下载的 junit-4.12.jar 进行添加。
图1

3、以同样的方式下载和导入 hamcrest: https://github.com/hamcrest/JavaHamcrest/releases ,否则,你将无法运行 Junit 单元测试。

Maven 安装 Junit
相比较而言,Maven 的安装要简单很多,打开你 Maven 项目中的 pom.xml 文件,添加如下配置:

<dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.12</version>    <scope>test</scope></dependency>

更多的 Maven 项目,可以登录:https://www.mvnrepository.com 网站查找。

编写单元测试

创建 JunitDemo 类,编写第一个单元测试用例。

import static org.junit.Assert.assertEquals;import org.junit.Test;public class JunitDemo {    @Test    public void myFirstTest() {
        assertEquals(2+2, 4);
    }

}

@Test 用来注释一个普通的方法为一条测试用例。

assertEquals() 方法用于断言两个值是否相关。

测试功能模块
创建一个被测试类:Count ,代码如下:

public class Count {    /**
     * 计算并返回两个参数的和
     */    public int add(int x ,int y){        return x + y;
    }
}

Count 类的实现非常简单,看注释就可以了。

接下来,创建 CountTest 类,用于测试 Count 类。

import static org.junit.Assert.assertEquals;import org.junit.Test;public class CountTest {    @Test    public void testAdd() {
        Count count = new Count();        int result = count.add(2,2);
        assertEquals(result, 4);
    }

}

new 出 Count 类,调用 add() 方法并传参,通过 assertEquals() 断言 返回结果。

JUnit 注解

JUnit 注解说明:

注解说明
@Test: 标识一条测试用例。 (A) (expected=XXEception.class)   (B) (timeout=xxx)
@Ignore: 忽略的测试用例。
@Before: 每一个测试方法之前运行。
@After : 每一个测试方法之后运行。
@BefreClass 所有测试开始之前运行。
@AfterClass 所有测试结果之后运行。
例子
创建被测试类 Count .

public class Count {    /**
     * 计算并返回两个参数的和
     */    public int add(int x ,int y){        return x + y;
    }    /**
     * 计算并返回两个数相除的结果
     */    public int division(int a, int b){        return a / b;
    }
}

创建测试类 CountTest .

import static org.junit.Assert.assertEquals;import org.junit.Ignore;import org.junit.Test;public class CountTest {    //验证超时    @Test(timeout=100)    public void testAdd() throws InterruptedException {
        Thread.sleep(101);        new Count().add(1, 1);
    }    //验证抛出异常    @Test(expected=ArithmeticException.class)    public void testDivision() {        new Count().division(8, 0);
    }    // 跳过该条用例    @Ignore    @Test    public void testAdd2() {
        Count count = new Count();        int result = count.add(2,2);
        assertEquals(result, 5);
    }

}

1、在 testAdd() 用例中设置 timeout=100 , 说明的用例的运行时间不能超过 100 毫秒, 但故意在用例添加 sleep() 方法休眠 101 毫秒,所以会导致用例失败。

2、在 Java 中被除数不能为0,所以 8⁄0 会报 ArithmeticException 异常, 在 @Test 中设置 expected=ArithmeticException.class ,说明抛该异常符合预期。

3、@Ignore 表来标识该用例跳过,不管用例运行成功还是失败。

执行结果如下:
图2

其他更深入的暂时还没看,这些目前够用了一点

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright bcfou.com.Some Rights Reserved.