码迷,mamicode.com
首页 > 编程语言 > 详细

java02 Junit创建及简单实现

时间:2018-05-09 19:30:55      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:frame   equal   null   blog   repos   .class   tom   概念   一点   

目录

[TOC]

一、Junit概念

        Junit是java语言单元测试框架,在java程序中,一个工作单元通常是指一个方法,那么单元测试也就是对一个方法进行测试,程序员一般通过Junit来完成自己代码的一个功能测试,所以单元测试又可以叫做程序员测试,如果测试人员在熟悉方法逻辑及其实现的情况下,也可以写Junit单元测试来进行接口测试,即白盒测试。

二、 Junit测试环境搭建

2.1 一点概念

市面上比较流行的服务器: tomcat(war)jboss(ear)weblogic

用的比较多的项目构建工具: antmaven:可以在线管理项目的依赖

2.2 导入Jar包的方式搭建Junit测试环境

注: maven中央仓库网址

  1. 创建一个普通的maven项目所需要的依赖包以及其对应的下载地址
  2. junit-4.11.jar
  3. hamcrest-core-1.3
  4. 之后添加项目的依赖项即可完成一个maven项目的创建(Jar文件)

2.3 创建Maven项目的方式搭建Junit测试环境

  1. 创建一个maven project
  2. 在pom.xml里面添加一个junit依赖

    2.3.1 具体步骤

  3. 创建maven项目
  4. 修改pom.xml
    ```xml




```
技术分享图片

三、 创建一个测试用例

3.1 注意事项

  1. src/test/java下新建Package,用于编写测试用例
  2. 所有编写的测试类都继承自junit.framework.TestCase
  3. 测试类中所有的方法均需要以test开头
    ```java
    package com.junit.exam01;

import junit.framework.TestCase;

// 所有编写的测试类都继承自junit.framework.TestCase
public class Example01 extends TestCase{
// 测试类中所有的方法均需要以test开头
public void testExam01(){
System.out.println("this is the first case");
}

public void testExam02() {
    System.out.println("This is the second case");
}

}
4. 可以使用**注解**的方式(装饰器)来标注test方法(**@Test**,此时测试方法**不必以test开头**,也不必继承**TestCase**java
package com.junit.exam01;

import org.junit.Test;

public class DecoExam{
// 以使用注解的方式来标注test方法此时测试方法不必以test开头
@Test
public void DecoExamA() {
System.out.println("This is test A");
}

@Test
public void DecoExamB() {
    System.out.println("This is test B");
}

}

```

四、 注解详解

4.1 @Test

4.2 @Before

在所有的测试方法执行之前执行一次

package com.junit.exam01;

import org.junit.Before;
import org.junit.Test;

import junit.framework.TestCase;

// 注意一下,用继承的方式before注解不管用了
public class DecoExamBefore{
    @Before
    public void funcBefore() {
        System.out.println("This is Before");
    }
    
    @Test
    public void DecoExamA() {
        System.out.println("This is test A");
    }
    
    @Test
    public void DecoExamB() {
        System.out.println("This is test B");
    }
}

技术分享图片

4.3 @After

在所有的测试方法执行之后执行一次

package com.junit.exam01;

import org.junit.After;
import org.junit.Test;

public class DecoExamAfter {
    @After
    public void funcBefore() {
        System.out.println("This is After");
    }
    
    @Test
    public void DecoExamA() {
        System.out.println("This is test A");
    }
    
    @Test
    public void DecoExamB() {
        System.out.println("This is test B");
    }
}

技术分享图片

4.4 @BeforeClass和@AfterClass

用BeforeClass注解的方法在类加载的时候首先被执行一次

package com.junit.exam01;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class DecoExamClassBefore2After {
    
    private int result = 0;
    
    // 使用BeforeClass和AfterClass注解需要使用static关键字
    @BeforeClass
    public static void beforeExam() {
        System.out.println("This is class before");
    }
    
    @AfterClass
    public static void adterExam() {
        System.out.println("This is class after");
    }
    
    @Test
    public void examA() {
        System.out.println("This is ExamA");
    }
    
    @Test
    public void examB() {
        System.out.println("This is ExamB");
    }
}

技术分享图片

五、断言

5.1 基础介绍

  1. assertEquals(a, b)

        判断两个数据是否一致,如果一致则表示测试通过,否则表示测试不通过,抛出断言错误

  1. assertNotEquals(a, b)

        判断两个数据是否不一致,如果不一致则表示测试通过,否则表示测试不通过,抛出断言错误

  1. assertNull(...)

        判断某数据是否为空,如果为空,则测试通过,否则抛出断言错误

  1. assertNotNull(...)

        判断某数据是否为空,如果不为空,则测试通过,否则抛出断言错误

  1. assertFalse(...)

        判断某数据是否为真,如果为假,则表示测试通过,否则抛出断言错误

  1. assertTrue(...)

        判断某数据是否为真,如果为真,则表示测试通过,否则抛出断言错误

5.2 案例

package com.junit.exam01;
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;

import com.junit.calc.CalcExam;

import junit.framework.Assert;

public class DemoTestCalc {
    private CalcExam calc;
    
    @Before
    public void InitCalc() {
        calc = new CalcExam();
    }
    
    @Test
    public void add() {
        calc.add(3);
        int result = calc.getResult();
        System.out.println("实际结果为:" + result);
        Assert.assertEquals(3, result);
    }
    
    @Test
    public void sub() {
        calc.sub(3);
        int result = calc.getResult();
        System.out.println("实际结果为:" + result);
        Assert.assertEquals(-3, result);
    }
    
    @Test
    public void multi() {
        calc.multi(3);
        int result = calc.getResult();
        System.out.println("实际结果为:" + result);
        Assert.assertEquals(0, result);
    }
    
    @Test
    public void div() {
        calc.div(3);
        int result = calc.getResult();
        System.out.println("实际结果为:" + result);
        Assert.assertEquals(0, result);
    }
    
}

//***************************************************************************************************//
// 以下是Clac类的内容
package com.junit.calc;

public class CalcExam {
    private int result = 0;
    
    public void add(int a) {
        result += a;
    }
    
    public void sub(int a) {
        result -= a;
    }
    
    public void div(int a) {
        if (a == 0) return;
        result /= a;
    }
    
    public void multi(int a) {
        result *= a;
    }
    
    public int getResult() {
        return this.result;
    }
}
//----------------------------------------------------------------------------------------------------//

六、 Junit打包(测试集实现)

        要实现测试集的功能需要使用一个特殊的Runner,因此我们需要向@RunWith标注中传递一个参数Suite.class(即 **@RunWith (Suite.class)** )。同时,我们还需另一个标注@SuiteClasses用以表明这个类是一个打包测试类,基本语法为 **@SuiteClasses({... , ... , ...})** ,其中的参数为需要测试的类
有了上述两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要,内容为空即可

package com.junit.exam01;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

// 固定写法,传递参数Suite.class
@RunWith(Suite.class)

// 将要测试的类写到里面
@SuiteClasses({
    // 由于用到的测试类都在同一个包中也不需要额外打包
    DemoTestCalc.class,
    DecoExamAfter.class,
    DecoExamBefore.class,
    DecoExamTest.class,
    DecoExamClassBefore2After.class
})

// 这个类为空即可,但是必须保留
public class DemoTestSuite {

}

技术分享图片

java02 Junit创建及简单实现

标签:frame   equal   null   blog   repos   .class   tom   概念   一点   

原文地址:https://www.cnblogs.com/gupan/p/9015819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!