博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件单元测试工具junit junit4使用帮助
阅读量:6356 次
发布时间:2019-06-23

本文共 3389 字,大约阅读时间需要 11 分钟。

hot3.png

在我们Java软件开发过程中,相应的测试也在有序穿插的进行着;在软件公司中称之为单元测试,单元测试,顾名思义:就是对一个个小的独立的功能模块进行测试,我们常用的单元测试工具有很多种,今天我们就来介绍一下大家最常用的JUNIT单元测试工具。

junit单元测试工具主要的版本是:3.x 和 4.x ;大家现在常用的应该都是4.x版本,那么junit3.x 与 4.x有什么区别呢?junit4.x又有哪些好用的快捷的功能呢?
1、junit3.x版本,我们通常使用junit 3.8
(1)、使用junit3.x版本进行单元测试时,测试类必须要继承于TestCase父类;
(2)、测试方法需要遵循的原则:
     A、public的
     B、void的
     C、无方法参数
     D、方法名称必须以test开头
(3)、不同的Test Case之间一定要保持完全的独立性,不能有任何的关联。
(4)、我们要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。
dome:

public class TestMyNumber extends TestCase {

    private MyNumber myNumber;
    public TestMyNumber(String name) {
        super(name);
    }
    // 在每个测试方法执行 [之前] 都会被调用
    @Override
    public void setUp() throws Exception {
        // System.out.println("欢迎使用Junit进行单元测试…");
        myNumber = new MyNumber();
    }
    // 在每个测试方法执行 [之后] 都会被调用
    @Override
    public void tearDown() throws Exception {
        // System.out.println("Junit单元测试结束…");
    }
    public void testDivideByZero() {
        Throwable te = null;
        try {
            myNumber.divide(6, 0);
            Assert.fail("测试失败");
        } catch (Exception e) {
            e.printStackTrace();
            te = e;
        }
        Assert.assertEquals(Exception.class, te.getClass());
        Assert.assertEquals("除数不能为 0 ", te.getMessage());
    }
}

2、junit4.x版本

(1)、使用junit4.x版本进行单元测试时,不用测试类继承TestCase父类,因为,junit4.x全面引入了Annotation来执行我们编写的测试。
(2)、junit4.x版本,引用了注解的方式,进行单元测试;
(3)、junit4.x版本我们常用的注解:
     A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;
     B、 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;
     C、@BeforeClass 注解:在所有方法执行之前执行;
     D、@AfterClass 注解:在所有方法执行之后执行;
     E、@Test(timeout = xxx) 注解:设置当前测试方法在一定时间内运行完,否则返回错误;
     F、@Test(expected = Exception.class) 注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class;
     G、 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。
dome:

package com.an.junit;

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestMyNumber {
    private MyNumber myNumber;
    @BeforeClass
    // 在所有方法执行之前执行
    public static void globalInit() {
        System.out.println("init all method...\r\n");
    }
    @AfterClass
    // 在所有方法执行之后执行
    public static void globalDestory() {
        System.out.println("destory all method...");
    }
    @Before
    // 在每个测试方法之前执行
    public void setUp() {
        System.out.println("start setUp method");
        myNumber = new MyNumber();
    }
   
    // 在每个测试方法之后执行
    public void tearDown() {
        System.out.println("end tearDown method\r\n");
    }
    @Test(timeout=600)// 设置限定测试方法的运行时间 如果超出则返回错误
    public void testAdd() {
        System.out.println("testAdd method");
        int result = myNumber.add(2, 3);
        assertEquals(5, result);
    }
   
    public void testSubtract() {
        System.out.println("testSubtract method");
        int result = myNumber.subtract(1, 2);
        assertEquals(-1, result);
    }
   
    public void testMultiply() {
        System.out.println("testMultiply method");
        int result = myNumber.multiply(2, 3);
        assertEquals(6, result);
    }
   
    public void testDivide() {
        System.out.println("testDivide method");
        int result = 0;
        try {
            result = myNumber.divide(6, 2);
        } catch (Exception e) {
            fail();
        }
        assertEquals(3, result);
    }
    @Test(expected = Exception.class)
    public void testDivide2() throws Exception {
        System.out.println("testDivide2 method");
        myNumber.divide(6, 0);
        fail("test Error");
    }
   
    public static void main(String[] args) {
    }
}

总 结:在单元测试中,测试用例的编写是很重要的,只有一个好的测试用例,才能检测出软件代码的健壮性,才能提高最后开发出软件的成功率;大家一定要明白一 点,我们进行单元测试,不是为了证明您是对的,而是为了证明您没有错误;只有这样我们的测试才有意义;还有一点就是,在我们进行单元测试之后一定要保证代 码的状态和进行单元测试之前是一致的;不能因为进行了单元测试,就要把原来的代码状态打乱,这样是不合理的,也是不符合逻辑的。我们不能只懂软件开发,也 要懂得如何更好的去找出你所开发的软件中存在的问题,只有这样,才能算是一位合格的。

转载自安安DIY创作室 

本文链接:

转载于:https://my.oschina.net/u/203101/blog/104818

你可能感兴趣的文章
Activity调用isDestroyed()方法报出,java.lang.NoSuchMethodError
查看>>
使用AFNetworking第三方下载类
查看>>
fhq-treap小结
查看>>
about porting
查看>>
MySQL事务及ACID特性
查看>>
Hadoop_31_MapReduce参数优化
查看>>
linux运维常见英文报错中文翻译(菜鸟必知)
查看>>
[原][osgEarth]添加自由飞行漫游器
查看>>
fastjson如何指定字段不序列化
查看>>
[日常] Go语言圣经--示例: 并发的Echo服务
查看>>
BZOJ1969: [Ahoi2005]LANE 航线规划(LCT)
查看>>
linux内存管理之malloc、vmalloc、kmalloc的区别
查看>>
GreenDao 数据库升级 连接多个DB文件 或者指定不同的model&dao目录
查看>>
M1卡破解(自从学校升级系统之后,还准备在研究下)【转】
查看>>
vue 访问子组件示例 或者子元素
查看>>
linux内核--自旋锁的理解
查看>>
银行卡的三个磁道
查看>>
OpenSSL 提取 pfx 数字证书公钥与私钥
查看>>
Keepalived详解(四):通过vrrp_script实现对集群资源的监控【转】
查看>>
CollapsingToolbarLayoutDemo【可折叠式标题栏,顺便带有CardView卡片式布局】
查看>>