利用JUnit4进行单元测试

Posted LiemZuvon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用JUnit4进行单元测试相关的知识,希望对你有一定的参考价值。

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

以上是关于利用JUnit4进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

junit4进行单元测试

(转)用JUnit4进行单元测试