Junit02 Junit创建及简单实现

目录

一、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>

添加依赖后结果展示

三、 创建一个测试用例

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

Before注解案例

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

After注解案例

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

BeforeClass和AfterClass案例

五、断言

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 {

}

测试结果

猜你喜欢

转载自blog.csdn.net/pangbianlaogu/article/details/80259334
今日推荐