欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Junit02 Junit创建及简单实现

程序员文章站 2022-04-05 17:14:46
...

目录

一、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 具体步骤

  1. 创建maven项目
  2. 修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maven</groupId>
  <artifactId>JunitTest02</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <!--  以下是添加的代码-->
  <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
      </dependency>
  </dependencies>
  <!--  添加代码结束-->

</project>

Junit02 Junit创建及简单实现

三、 创建一个测试用例

3.1 注意事项

  1. src/test/java下新建Package,用于编写测试用例
  2. 所有编写的测试类都继承自junit.framework.TestCase
  3. 测试类中所有的方法均需要以test开头
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");
    }
}
  1. 可以使用注解的方式(装饰器)来标注test方法(@Test,此时测试方法不必以test开头,也不必继承TestCase
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");
    }
}

Junit02 Junit创建及简单实现

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");
    }
}

Junit02 Junit创建及简单实现

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");
    }
}

Junit02 Junit创建及简单实现

五、断言

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 {

}

Junit02 Junit创建及简单实现

相关标签: Junit