关闭

利用JUnit4进行单元测试

标签: junit单元测试异常处理测试
272人阅读 评论(0) 收藏 举报
分类:

利用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用起来:)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39616次
    • 积分:679
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:0篇
    • 译文:0篇
    • 评论:16条
    最新评论