利用JUnit4进行单元测试

原创 2016年05月31日 14:57:37

利用JUnit4进行单元测试

单元测试是测试里面非常重要的一块,而且单元测试通常都是由编程人员自行测试的,因此,不是说只有从事测试的人员才需要学习单元测试,而是每个人都要学。试想一下,如果读者编了一个复杂的程序,里面包含了很多方法,但是,却不想对每个类都编写一个main函数去测试,而且有时也无法修改main去测试(如果main之前就已经有复杂的实现,并且可能还跟环境有关时)。利用JUnit单元测试,就可以很好地解决我们一切头疼事,加快开发效率。因此,小编今天上网学习了下,把心得分享给大家~

待测试代码

下面给出我们的待测试代码,里面包含了多个待测试的方法。其实就是个计算器的简易类(是参考网上的)。

package mJUnitStu;

public class Calculator {
    private static int result;
    public void add(int n)
    {
        result=result+n;
    }

    public void substract(int n)
    {
        result=n;        //Bug:正确的应该是result=result-n;
    }

    public void multiply(int n)
    {
        result *= n;
    }

    public void divide(int n)
    {
        result=result/n;
    }

    public void square(int n)
    {
        result=n*n;
    }

    public void squareRoot(int n)
    {
        for(;;);    //Bug:Dead Loop
    }

    public void clear()
    {
        result=0;
    }

    public int getResult()
    {
        return result;
    }
}

引入JUnit4包

在Eclipse里,在package explorer中,我们右键点击我们的项目,然后选中properties,在Java Build Path选项卡,选择Libraries, 然后点击Add Library,找到JUnit,选择Finish就可以啦。
这里写图片描述

添加JUnit Test Case

在引入JUnit4包后,在主界面中选择file->new->JUnit Test Case。
这里写图片描述
这里选中setUp() 和 tearDown()两项,这两项将会为测试用例添加两个方法,并且setUp()会在每个测试方法执行的之前执行一遍,同理tearDown()会在每个测试方法执行之后执行一遍。然后我们可以得到如下的测试用例。

package mJUnitStu;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

public class CalculatorTest {

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void test() {
            fail("Not yet implemented");
    }
}

这时,我们按F11执行单元测试时,就会报错
这里写图片描述
原因很显然就是我们的fail语句造成的。

开始单元测试

初始化测试实例以及setUp、tearDown方法

我们把测试类内部的内容改成如下

    private static Calculator calculator= new Calculator();

    @Before
    public void setUp() throws Exception {
        calculator.clear();
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void test() {
        System.out.println("The first test");
    }

然后执行单元测试,发现这次测试就通过了。这里我们新建了一个测试的实例calcalator,并且给setUp编写了初始化的内容,那么这之后,在每个标记有@Test的方法调用前,都会先调用setUp,之后会调用tearDown,由于我们这里不需要进行什么后续的操作,因此tearDown可以留空。
这里写图片描述

自定义第一个测试方法

第一步很顺利,这说明了JUnit成功的运行了,接下来我们来一些更复杂的测试,在测试程序中,添加如下方法,注意,这些方法的命名并没有特别要求,但是一定要注意的是,必须有@Test,返回值必须为空,方法不接受任何传入参数。

    @Test
    public void testClear() {
        calculator.clear();
        assertEquals(calculator.getResult(), 0);
    }

测试结果如下
这里写图片描述

利用assertEquals做异常处理

添加


    @Test
    public void testSubstract() {
        calculator.add(10);
        calculator.substract(2);
        assertEquals(8,calculator.getResult());
     }

测试结果如下
这里写图片描述
出错了,为什么呢,观察到我们的subtract方法,发现方法写错了,改成如下

    public void substract(int n)
    {
        result=result-n;
    }

再次调用测试发现就通过测试了
这里写图片描述
当然,处理assertEquals以外还有很多其他的assert方法,这里小编不一一举出,需要的读者可以自行谷歌~

跳过某些测试方法

在编写程序前,我们可能会实现写好测试用例,然后我们边实现边测试,但是有些还没实现的方法就会到时测试方法报错,这时,我们只要在测试方法上方加个@Ignore就可以了,比如说我们的mutiply方法还未实现,我们就可以用

    @Ignore("Multiply() Not yet implemented")  
    @Test
    public void testMultiply() {

    }

跳过该测试方法
这里写图片描述

设置timeout检查死循环

我们的squareRoot方法出现了个死循环,此时添加测试方法如下

    @Test(timeout=1000)
    public void testSquareRoot()
    {
        calculator.squareRoot(4);
    }

就可以限定该方法的执行时间,如果超时,就会报错
这里写图片描述
除了timeout参数以外,还有其他的参数,感兴趣的读者可以自行谷歌~

后记

JUnit4的单元测试就介绍到这里,相信读者应该有个直观的认识了,利用单元测试可以给我们的开发带来便捷以及安全保障,所以希望各位读者在之后的开发中,也能主动的把JUnit用起来:)

在Eclipse中使用JUnit4进行单元测试(实例篇)

四、实例总结 1. 参数化测试 有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测...
  • dreamjava9213
  • dreamjava9213
  • 2014年12月15日 23:01
  • 1926

在Eclipse中使用JUnit4进行单元测试(高级篇)

通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下 JUnit4 中一些高级特性。一、 高级 Fixture上一篇文章中我们介绍了两个 Fixture 标注,分别...
  • huangjin0507
  • huangjin0507
  • 2016年07月05日 16:06
  • 1898

Eclipse中使用JUnit4进行单元测试具体操作

简述 Eclipse使用的版本Eclipse Mars(4.5) JUnit是Java语言的单元测试框架 junit3与junit4的区别 在junit3中,如果某个类是测试类,必须将其继承类Tes...
  • YoutellIdo
  • YoutellIdo
  • 2015年10月28日 00:38
  • 6283

java ssh 框架下 利用junit4 spring-test进行单元测试

ssh框架下  由于bean实列 都交给spring 管理,要做单元测试就比较苦难,junit4 引入注解方便很多; 1. 加入依赖包   使用Spring的测试框架需要加入以下依赖包: J...
  • CHINADENG
  • CHINADENG
  • 2013年11月21日 14:23
  • 9523

在Eclipse中使用JUnit4进行单元测试.doc

  • 2010年05月08日 14:19
  • 592KB
  • 下载

使用eclipse与Junit4进行单元测试的最简单例子(包括文档与源码)

  • 2013年07月04日 15:03
  • 330KB
  • 下载

在Eclipse中使用JUnit4进行单元测试

  • 2010年01月09日 11:18
  • 624KB
  • 下载

转: 在Eclipse中使用JUnit4进行单元测试(中级篇)

我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇文章中,我们来仔细分析一下这个测试框架中的每一个细节,知其然更要知其所以然,才能更加熟练地应用JUnit4...
  • shandong_chu
  • shandong_chu
  • 2014年05月20日 17:28
  • 569

在Eclipse中使用JUnit4进行单元测试(初级篇)

本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函...
  • zhuce0001
  • zhuce0001
  • 2016年08月01日 23:15
  • 240

在Eclipse中使用JUnit4进行单元测试(初级篇)

转载自:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html 我们在编写大型程序的时候,需要写成千上万个方法或...
  • cczz598
  • cczz598
  • 2014年07月15日 11:45
  • 293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用JUnit4进行单元测试
举报原因:
原因补充:

(最多只允许输入30个字)