Intellij IDEA中添加JUnit4/5单元测试


Intellij IDEA中添加JUnit单元测试

一、下载jar

首先需要去下载JUnit的jar包以及一个依赖包hamcrest.core,例如:
junit:junit:4.13-beta-1
hamcrest.core:1.3.0.1
需要注意的是hamcrest.core包不能使用2.1版本的,因为4.13版本的JUnit和它不兼容,会抛出ClassNotFoundException异常。

 

推荐使用 junit-4.13.jar 和 hamcrest-core-1.3.jar ,可以使用 https://jar-download.com/  下载

二、在Intellij IDEA项目中添加jar

首先需要在IDEA中添加刚才下载好的包:

 

 

 

三、下载插件并进行设置

然后需要下载一个名为JUnitGeneratorV2.0的插件:

然后对其进行设置:

 

四、创建存放测试文件的目录

1.使用快捷键alt+insert创建的test类

 

通过 JUnitGenetor插件,使用Alt+Insert快捷键自动生成当前类的所有方法的测试单元时,自动生成的 .java 文件的存放目录,即使:

 

2.使用快捷键Ctrl+Shift+T创建的test类

创建文件夹指定类型为Tests

 

 

 

 

如果是使用Ctrl+Shift+T快捷键自定义需要测试的方法,则生成的文件会存放于指定的存放测试文件的目录

  

将图片中的$data改为$today是为了防止生成的测试类产生乱码。

 

 

 


五、创建Test用例

1.前提:原始类

public class Calculate {
   
    public static int add(int a, int b) {
        return a + b;
    }

    public static int substract(int a, int b) {
        return a - b;
    }

    public static int multiply(int a, int b) {
        return a * b;
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

 

2. (Junit4)使用快捷键alt+insert创建的test类

package test.com.panta;

import com.panta.Calculate;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

/**
* Calculate Tester.
*
* @author <haokun>
* @since <pre>08/11/2020</pre>
* @version 1.0
*/
public class CalculateTest {

@Before
public void before() throws Exception {
    System.out.println("测试开始");
}

@After
public void after() throws Exception {
    System.out.println("测试结束");
}

/**
*
* Method: add(int a, int b)
*
*/
@Test
public void testAdd() throws Exception {
    assertEquals(8, Calculate.add(2, 6));
}

/**
*
* Method: substract(int a, int b)
*
*/
@Test
public void testSubstract() throws Exception {
    assertEquals(7,Calculate.substract(9,2));
}

/**
*
* Method: multiply(int a, int b)
*
*/
@Test
public void testMultiply() throws Exception {
    assertEquals(15,Calculate.multiply(3, 5));
}

/**
*
* Method: divide(int a, int b)
*
*/
@Test
public void testDivide() throws Exception {
    assertEquals(2,Calculate.divide(4, 2));
}
}

运行结果:

 

 

 

3. (Junit4)使用快捷键Ctrl+Shift+T创建的test类

package com.panta;

import org.junit.*;

import static org.junit.Assert.assertEquals;

public class CalculateTest {
   
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("this is beforeClasss....");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("this is afterClasss....");
    }

    @Before
    public void before() throws Exception {
        System.out.println("测试开始");
    }

    @After
    public void after() throws Exception {
        System.out.println("测试结束");
    }

    @Test
    public void testadd(){
        assertEquals(6,new Calculate().add(3, 3));
    }

    @Test
    public void testsubstract(){
        assertEquals(2,new Calculate().substract(5, 3));
    }

    @Test
    public void testmultiply(){
        assertEquals(15,new Calculate().multiply(5, 3));
    }
    @Test
    public void testdivide() {
        assertEquals(2, new Calculate().divide(6, 3));
    }
    @Ignore
    public void testdivide1() {
        assertEquals(2, new Calculate().divide(6, 3));
        System.out.println("this is divideClasss....");
    }

}

运行结果:

 

 

 

4.总结:

@BeforeClass

修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )

@AfterClass

所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )

@Before和@After 会在每个测试方法前后各执行一次

@Test:测试方法,在这里可以测试期望异常和超时时间

@Ignore:忽略的测试方法

----------------------------------------------------------------------------------------------

 

1.测试方法上必须使用@Test

2.测试方法必须使用 public void进行修饰

 

3.新建一个源代码目录来存放测试代码

4.测试类的包应该和被测试类的包一样

5.测试单元中的每个方法一定要能够独立测试,其方法不能有任何依赖

 

 

六、junit 测试套件Suite

1.创建2个测试函数:

package test.com.panta;

import com.panta.Calculate;
import org.junit.*;

import static org.junit.Assert.assertEquals;

public class CalculateTest1 {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("CalculateTest1:this is beforeClasss....");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("CalculateTest1:this is afterClasss....");
    }

    @Before
    public void before() throws Exception {
        System.out.println("CalculateTest1测试开始");
    }

    @After
    public void after() throws Exception {
        System.out.println("CalculateTest1测试结束");
    }

    @Test
    public void testdivide1() {
        assertEquals(2, new Calculate().divide(6, 3));
        System.out.println("CalculateTest1:this is divideClasss....");
    }

}

 

 

package test.com.panta;

import com.panta.Calculate;
import org.junit.*;

import static org.junit.Assert.assertEquals;

public class CalculateTest2 {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("CalculateTest2:this is beforeClasss....");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("CalculateTest2:this is afterClasss....");
    }

    @Before
    public void before() throws Exception {
        System.out.println("CalculateTest2测试开始");
    }

    @After
    public void after() throws Exception {
        System.out.println("CalculateTest2测试结束");
    }

    @Test
    public void testdivide1() {
        assertEquals(2, new Calculate().divide(6, 3));
        System.out.println("CalculateTest2:this is divideClasss....");
    }

}

 

2.把2个测试函数加入Suite:

package test.com.panta;

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

@RunWith(Suite.class)   //@RunWith表示这个类将以哪种形式来跑
@Suite.SuiteClasses({    //@Suite.SuiteClasses则可以包含多个test unit
       
CalculateTest1.class,
        CalculateTest2.class
})
public class SuiteTest {

    /**
     * 1.
测试套件就是组织测试类一起运行的
    
*
     *
写一个作为测试套件的入口类,这个类里不包含其他的方法
    
* 更改测试运行器Suite.classes,将要测试的类作为数组传入到Suite.SuiteClasses({})
     */

}

 

 

查看运行结果:

 

 

七、报告生成

1、环境准备

Intellij IDEA

JUnit4

1.1.安装 Ant

直接在官网下载最新的 Ant 即可https://downloads.apache.org/ant/binaries/

 

 

 1.2.配置 Ant

  在系统环境变量的 Path 中添加 Ant 路径。例如我的路径为 E:\JetBrains\apache-ant-1.10.8\bin

1.3.测试 Ant 是否配置成功

  在 cmd 中输入 ant -version,显示版本信息即正确。

 

 

 

2、编写测试代码

2.1.在 src 目录下编写测试类

package cn;

public class Calculate {

    private static int a;
    private static int b;

    public static int add(int a, int b) {
        return a + b;
    }

    public static int substract(int a, int b) {
        return a - b;
    }

    public static int multiply(int a, int b) {
        return a * b;
    }

    public static int divide(int a, int b) {
        return a / b;
    }

}

 

2.2在 test 目录(如果没有则新建 Test ,并且将其设置为 Test Sources Root)下编写测试类

 

 

 

package cn;

import org.junit.Assert;
import org.junit.Test;

public class TestCalculate {

    @Test
    public void testAdd() throws Exception {
        Assert.assertEquals(8,Calculate.add(2, 6));
    }

    @Test
    public void substract() throws Exception {
        Assert.assertEquals(7,Calculate.substract(9,2));
    }

    @Test
    public void testMultiply() throws Exception {
        Assert.assertEquals(15,Calculate.multiply(3, 5));
    }
    @Test
    public void testDivide() throws Exception {
        Assert.assertEquals(2,Calculate.divide(4, 2));
    }

}

 

3、编写 Ant 配置文件

  一般配置文件命名为 build.xml ,在项目根目录下创建配置文件 build.xml ,然后在界面右侧靠边处选择 【Ant】,点击后选择 【+】 添加该文件到 Ant 中。

 

build.xml  内容如下:

<?xml version="1.0"?>

<project name="ant and junit" default="test auot junit and report" basedir=".">

    <!-- 定义工程依赖的jar包存放的位置 -->
    <property name="lib.dir" value="lib"/>
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>

    <property name="output folder" value="classes"/>
    <property name="src folder" value="src"/>
    <property name="test folder" value="test"/>
    <property name="report folder" value="report"/>

    <target name="clean">
        <delete dir="report"/>
        <echo>清除测试报告文件 成功!</echo>
    </target>

    <target name="compile init">
        <mkdir dir="${output folder}"/>
        <echo>创建编译文件夹 成功!</echo>
    </target>

    <target name="report init" depends="clean">
        <mkdir dir="${report folder}"/>
        <echo>创建测试报告文件夹 成功!</echo>
    </target>

    <target name="compile" depends="compile init">
        <javac srcdir="${src folder}" destdir="${output folder}" classpathref="classpath"/>
        <echo>项目源文件编译 成功!</echo>
    </target>

    <target name="test compile" depends="report init">
        <javac srcdir="${test folder}" destdir="${output folder}" classpathref="classpath"/>
        <echo>项目测试文件编译 成功!</echo>
    </target>

    <target name="all compile" depends="compile, test compile">
    </target>

    <target name="test auot junit and report" depends="all compile">
        <junit printsummary="on" fork="true" showoutput="true">
            <classpath>
                <fileset dir="${lib.dir}" includes="**/*.jar"/>
                <pathelement path="${output folder}"/>
            </classpath>
            <formatter type="xml"/>
            <batchtest todir="${report folder}">
                <fileset dir="${output folder}">
                    <include name="**/Test*.*"/>
                </fileset>
            </batchtest>
        </junit>
        <junitreport todir="${report folder}">
            <fileset dir="${report folder}">
                <include name="TEST-*.xml"/>
            </fileset>
            <report format="frames" todir="${report folder}"/>
        </junitreport>
    </target>

</project>

 

另外:pom.xml添加信息

<?xml version="1.0" encoding="UTF-8"?>
<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>1</groupId>
    <artifactId>1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.vcplatform.test</groupId>
            <artifactId>testng</artifactId>
            <version>6.11</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/testng-6.11.jar</systemPath>
        </dependency>

    </dependencies>


</project>

 

4、运行结果

4.1.项目目录结构

  在项目运行时需要单独的 JUnit.jar ,所以需要先在项目根目录下创建 lib 文件夹,并将 JUnit.jar 放入其中。

 

4.2.选择该 Ant 类,点击运行即可,如果测试正确会在终端显示正常编译结果。

 

4.3.在浏览器中输入 项目的路径/report/index.html 可以查看 Ant 自动化测试的报告结果。

 

 

 

八、Junit5

Pom.xml 添加依赖

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.5.0</version>
    <scope>test</scope>
    <systemPath>${project.basedir}/lib/junit-platform-launcher-1.5.0.jar</systemPath>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.6.2</version>
    <scope>test</scope>
    <systemPath>${project.basedir}/lib/junit-jupiter-engine-5.6.2.jar</systemPath>
</dependency>
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.6.2</version>
    <scope>test</scope>
    <systemPath>${project.basedir}/lib/junit-vintage-engine-5.6.2.jar</systemPath>
</dependency>

并把对应的jar放在路径中,jar可以在这里下载:https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine/5.6.2

 

 

 

运行一个:

 

 

 

package cn;

import org.junit.Assert;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertAll;

import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

class CalculateTest5 {

    @Test
    void add() throws Exception{
        Assert.assertEquals(8,Calculate.add(2, 6));

    }

}

 

运行结果:

 

 

 

 

对比Junit4,有几个特点:

导入测试测试注解(@Test)和断言方法(assertEquals)的路径不同。其次,不需要手动把测试和测试方法声明为 public

没有发现有什么特别的,忽略掉


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM