博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit4基础 使用JUnit4进行单元测试
阅读量:7207 次
发布时间:2019-06-29

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

  

JUnit 4

 

  JUnit 4全面引入了Annotation来执行我们编写的测试。

  关于JUnit 3的使用可以参见:

 

  使用JUnit 4进行测试:

  1.新建项目,引用JUnit 4类库。

  2.新建立source folder,存放测试类代码,但是注意测试类代码和被测试代码的包名一致。

  3.编写被测试类代码。

  前面的都是和JUnit 3类似的,下面就开始不同了:

  4.编写测试类代码:

  JUnit 4并不要求测试类继承TestCase父类。

  测试方法上面需要加上一个Annotation:@Test

  在一个测试类中,所有被@Test注解所修饰的public,void方法都是test case,可以被JUnit所执行。

 

Test文档:

org.junit

Annotation Type Test

--------------------------------------------------------------------------------

@Retention(value=RUNTIME)

@Target(value=METHOD)

public @interface Test

The Test annotation tells JUnit that the public void method to which it is attached can be run as a test case.

To run the method, JUnit first constructs a fresh instance of the class then invokes the annotated method.

Any exceptions thrown by the test will be reported by JUnit as a failure.

If no exceptions are thrown, the test is assumed to have succeeded.

 

最佳实践

  JUnit 4不再要求方法的名字,可以给测试方法任意命名,但是为了可读性,还是建议以test开头命名,如JUnit 3要求的那样

 

如何实现JUnit 3中的setUp()和tearDown()

  比如测试前面用过的计算的类:

 

Calculator
package com.mengdd.junit4;public class Calculator{    public int add(int a, int b)    {        return a + b;    }    public int subtract(int a, int b)    {        return a - b;    }    public int multiply(int a, int b)    {        return a * b;    }    public int divide(int a, int b) throws Exception    {        if (0 == b)        {            throw new Exception("除数不能为0");        }        return a / b;    }}

 

 

  现在要测试这个类中的前三个方法,写出测试类如下:

CalculatorTest
package com.mengdd.junit4;import org.junit.Test;import static org.junit.Assert.assertEquals;//静态导入public class CalculatorTest{    @Test    public void testAdd()    {        Calculator cal = new Calculator();        int result = cal.add(3, 5);        assertEquals(8, result);    }    @Test    public void testSubstract()    {        Calculator cal = new Calculator();        int result = cal.subtract(1, 6);        assertEquals(-5, result);    }    @Test    public void testMultiply()    {        Calculator cal = new Calculator();        int result = cal.multiply(5, 9);        assertEquals(45, result);    }}

 

  这样是可以完成测试功能,如何避免重复呢?

  就好像JUnit 3的时候把创建对象的代码放在setUp()中那样。

 

  JUnit 4中还是依靠注解来解决:@Before

  被这个注解标注的方法会在每个测试用例之前被调用。

  相应的,对应于tearDown()方法的是用@After实现的。

   这两个方法会在每一个测试用例的前后被调用,所以可以用来创建对象,对于每个测试用例来说都是一个新的对象。

 

全局的初始化和销毁:@BeforeClass和@AfterClass

  @BeforeClass:在所有的方法调用之前调用的一个方法;用来进行一些开销昂贵的初始化操作,比如连接数据库。

  @AfterClass:在所有的方法调用之后调用的方法。

  注意这两个修饰符修饰的方法必须是public static void的,并且没有参数(no-arg)。

 

  Note:

  即便@BeforeClass修饰的方法抛出异常了,@AfterClass修饰的方法也会照常执行。

  基类的@BeforeClass方法会在子类的@BeforeClass方法之前进行;而基类的@AfterClass方法会在子类的@AfterClass方法之后进行。

 

  修改后的代码如下:

CalculatorTest V2
package com.mengdd.junit4;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import static org.junit.Assert.assertEquals;//静态导入public class CalculatorTest{    private Calculator cal = null;        @BeforeClass    public static void globalInit()    {        System.out.println("global Init invoked!");    }        @AfterClass    public static void globalDestroy()    {        System.out.println("global Destroy invoked!");    }    @Before    public void init()//setUp()    {        cal = new Calculator();        System.out.println("init --> cal: " + cal);    }    @After    public void destroy()//tearDown()    {        System.out.println("destroy");    }    @Test    public void testAdd()    {        System.out.println("testAdd");        int result = cal.add(3, 5);        assertEquals(8, result);    }    @Test    public void testSubtract()    {        System.out.println("testSubtract");        int result = cal.subtract(1, 6);        assertEquals(-5, result);    }    @Test    public void testMultiply()    {        System.out.println("testMultiply");        int result = cal.multiply(5, 9);        assertEquals(45, result);    }    }

 

 

@Ignore

  @Ignore注解可用于修饰测试类与测试方法,被@Ignore所修饰的方法或类中的测试(@Test修饰的测试)将不会被执行。

  @Ignore中可以加上参数值,说明忽略测试的原因。

 

参考资料

  圣思园张龙老师视频教程。

  JUnit4 chm格式文档网盘下载链接:

  JUnit 4.0:

转载地址:http://wuoum.baihongyu.com/

你可能感兴趣的文章
Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
查看>>
Mysql主键、外键和索引的区别
查看>>
struts基础
查看>>
块状链表 codevs 2333弹飞绵羊
查看>>
(九)jsMath
查看>>
CE_现金模组基本概念(概念)
查看>>
饭后一题
查看>>
Zynq-7000 FreeRTOS(一)系统移植配置
查看>>
[笔记][朝花夕拾][Multisim基础电路范例].第一章 RLC电路,第七、八节 米勒定理...
查看>>
免费论文查重
查看>>
【GPRS】GSM和GPRS模块的应用
查看>>
第一章 Docker简介和基本概念
查看>>
java代码-----实现打印三角形
查看>>
python(4) 小程序-异步加载
查看>>
20190327(练手感)
查看>>
modelform动态显示select标签的对象范围
查看>>
Android ---------- 富文本构建
查看>>
leetcode:Count Primes
查看>>
[转] babel的使用
查看>>
CentOS7.0安装与配置Tomcat-7
查看>>