java单元测试---junit简介

来源:互联网 发布:淘宝店推广方式 编辑:程序博客网 时间:2024/05/18 02:22

unit是一套开源的测试框架,各个语言的单元测试框架大部分都是基于这个框架演变而来,单元测试即是最小的可测试单元,例如c语言中的函数(cunit),和java中类(junit)

所以java中单元测试简称junit

首先编写要测试的类

package com.leige.test;/** * @author  * 首先编写要测试来得类 * */public class Calc {    public int add(int x,int y){        System.out.println("相加为==="+(x+y));    return x+y;    }}

1:junit中注解的解释及使用:

测试过程,解释依然在代码中:

package com.leige.test;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;/** * @author  *简介java单元测试,junit操作 * */public class CalcTest {//简介junit注解使用/*  需要注意的是,beforeclass和afterclass必须要由static修饰 * 而其他方法不必 *  * */    @BeforeClass    //这个方法是类中所有方法执行之前执行,所以经常在这个方法中加载配置    public static void beforeCalc(){        System.out.println("在类中所有方法之前执行....");    }    //被测试方法执行之前    @Before    public void before(){        System.out.println("在被测试方法之前执行....");    }    @Test    public  void addTest(){        new Calc().add(1, 3);    }    @After    //被测试方法执行之后执行    public void after(){        System.out.println("在被测试方法执行之后执行.....");    }    //在类中所有方法执行之后执行    //@AfterClass所修饰的方法通常用来对资源的清理,如关闭数据库的连接    @AfterClass    public static void afterClass(){        System.out.println("在类中所有方法执行之后执行.....");    }}

2:junit的参数化测试

比如当我们要使用,大量的测试数据来测试一个算法的性能或者其正确性是,我们不可能一个个输入测试数据,所以需要用到参数化测试,需要自动导入参数:规范如下:

package com.leige.test;import static org.junit.Assert.*;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;/** * @author  * 批量参数化测试数据 * *//** * @author  * */@RunWith(Parameterized.class)public class CalcParameters {    private int x=0;    private int y=0;    private int expected=0;    /*     * 1.更改默认的测试运行器为RunWith(Parameterized.class)     * 2.声明变量来存放预期值 和结果值     * 3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰     * 4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值     */    //实现将值赋给形参    public CalcParameters(int x, int y, int expected) {        this.x = x;        this.y = y;        this.expected = expected;    }    /**     * @return     * 提供参数     */    @Parameters    public static Collection<Object[]> t() {        //这里也可以从文件中读取测试数据,也可以自己生成        return Arrays.asList(new Object[][]{                {1,2,3},                {2,2,4},                {2,1,3},                {2,5,7}        }) ;    }    /**执行测试     *      */    @Test    public void testAdd() {    assertEquals(expected, new Calc().add(x,y));    }}

3:junit中的组合测试,因为不是十分理解,我暂时没有用过,所以先写在这里,作为记录参考别人的博客:

 JUnit 中所有的测试方法都是由测试运行器负责执行。JUnit单元测试提供了一个默认的测试运行器BlockJunit4ClassRunner,但是并没有限制必须使用默认的运行器。/*我们可以根据需要定制自己的运行器,只要继承自org.junit.runner.Runner即可。一般情况下,默认测试运行器可以应对绝大多数的单元测试要求。当使用JUnit提供的一些高级特性(如实现参数化测试、实现打包测试或者针对特殊需求定制JUnit测试方式)时,则需要显示地声明测试运行器。如@RunWith(CustomerTestRunner.class)。*/import static org.junit.Assert.*;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;/** * @author 都市桃源 * */@RunWith(Suite.class)@SuiteClasses({JunitExceptionTest.class,Junit4ParameterTest.class,JunitTimeoutTest.class})public class JUnit4SuiteTest { @Test public void allTest(){  assertNotNull(null); }}//JUnit 为我们提供了打包测试的功能,将所有需要运行的测试用例集中起来,一次性地运行所有测试用例,大大地方便了我们的//测试工作。//通过@RunWith注解指定一个Suite测试运行器,另外通过@SuiteClasses注解将所有需要进行测试的用例打包起来。/*     * 1.测试套件就是组织测试类一起运行的     *      * 写一个作为测试套件的入口类,这个类里不包含其他的方法     * 更改测试运行器Suite.class     * 将要测试的类作为数组传入到Suite.SuiteClasses({})     */

最好,建议测试代码和源码分开,这样在软件的开发完成时就可以将测试代码完全剔除,作为产品,交付给客户了,如果和源码放在混合在一起,会显得很不清晰,也不利于后期维护

0 0
原创粉丝点击