IntelliJ:JUnit单元测试

0、参考

在Intellij IDEA中添加JUnit单元测试 - 唐啊唐囧囧 - 博客园

1、引言

JUnit是Java中很出名的一个单元测试,关于JUnit的具体介绍,可以看之前写的编写JUnit测试 - ShineLe - 博客园

2、下载jar包

首先需要下载JUnit的jar包和它的依赖包hamcrest.core,下载地址:

junit:junit:4.13-beta-1
hamcrest.core:1.3.0.1

3、在IntelliJ IDEA项目中添加jar包

File→Project Structure→Module→Dependencies→右侧“+”号→JARs or directories...

 4、下载插件并设置

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

File→Settings→Plugins→搜索JUnitGeneratorV2.0

对其进行设置

输出路径

输出路径是指通过JUnitGenerator插件,使用Alt + Insert快捷键自动生成当前class的所有方法的测试单元时,自动生成的.java的存放路径

默认路径是 $ {SOURCEPATH} / test / $ {PACKAGE} / $ {FILENAME},这里的SOURCEPATH是指.java文件所在的src目录,所以生成的测试文件夹test其实是在src目录下的,路径为src/test

如果想要testsrc同级,可以把输出路径修改为SOURCEPATH/../test/xxx,即${SOURCEPATH}/../test/${PACKAGE}/${FILENAME}

 如果是使用Ctrl + Shift + T快捷键自定义需要测试的方法,则生成的文件会存放在指定的 存放测试文件的目录(下一节说明)。

JUnit内容修改

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

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

5.1、新建test目录,和src目录同级

需要在项目下新建一个文件夹,用于存放自动生成的测试.java文件,比如Factorial.java类对应的FactorialTest.java文件的存放位置。

这里我新建一个test目录,和src目录同级,如图:

 5.2、将该目录设置为存放测试文件的目录

File→Project Structure→Modules→选中test,将其标记为Tests

 标记完成后,会在右侧显示文件夹的性质:

6、使用JUnit

Alt + Insert:为所有方法创建测试类

当想要为当前类添加测试代码,只需要在当前类中使用Alt + Insert(或者工具栏Code→Generator),选择Test...→ JUnit5,就会自动生成当前类的测试类:

 

 

Ctrl + Shift + T:选择性测试

插件默认会测试所有方法,使用快捷键Ctrl + Shift +T可以选择性地测试部分方法,非常方便。

 

 在输出路径中就可以看到自动生成的测试类,它只含有需要测试的方法,接下来就是编写代码对类进行测试了。

测试断言

  • assertTrue(): 期待结果为true
  • assertFalse(): 期待结果为false
  • assertNotNull(): 期待结果为非null
  • assertArrayEquals(): 期待结果为数组并与期望数组每个元素的值均相等
  • ...

7、编写测试代码,测试

7.1、待测试类Factorial

复制代码
public class Factorial {
    public static long fact(long n) {
        long r = 1;
        for (long i = 1; i <= n; i++) {
            r = r * i;
        }
        return r;
    }
}
复制代码

7.2、为待测试类编写JUnit测试类

按照第6节所说的内容,Alt + Insert 或 Ctrl + Shift + T生成JUnit测试类,并为相关方法的测试方法编写测试代码,测试代码主要由断言Assertion构成:

复制代码
import org.junit.Test;

import static org.junit.Assert.*;

public class FactorialTest {

    @Test
    public void fact() {
        assertEquals(1, Factorial.fact(1));
        assertEquals(23, Factorial.fact(2));
        assertEquals(6, Factorial.fact(3));
        assertEquals(3628800, Factorial.fact(10));
        assertEquals(2432902008176640000L, Factorial.fact(20));
        System.out.println("over!");
    }
复制代码

测试方法前用@Test注解,这是JUnit要求的,它会把带有@Test的方法识别为测试方法。

7.3、运行测设类

配置JUnit:Edit Configuration→Add New Configuration→JUnit→Class设置为测试类

 

 

运行:Run

结果:

复制代码
D:\Java\jdk-16.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar=58810:D:\IntelliJ IDEA\IntelliJ IDEA 2020.2.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\IntelliJ IDEA\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar;D:\IntelliJ IDEA\IntelliJ IDEA 2020.2.3\plugins\junit\lib\junit5-rt.jar;D:\IntelliJ IDEA\IntelliJ IDEA 2020.2.3\plugins\junit\lib\junit-rt.jar;C:\Users\Le\Desktop\JavaTest\out\test\JavaTest;C:\Users\Le\Desktop\JavaTest\out\production\JavaTest;D:\Java\jar_Download\junit-4.13-beta-1.jar;D:\Java\jar_Download\org.ops4j.pax.tipi.hamcrest.core-1.3.0.1.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 FactorialTest

java.lang.AssertionError: 
Expected :362800
Actual   :3628800
<Click to see difference>


    at org.junit.Assert.fail(Assert.java:89)
    at org.junit.Assert.failNotEquals(Assert.java:835)
    at org.junit.Assert.assertEquals(Assert.java:647)
    at org.junit.Assert.assertEquals(Assert.java:633)
    at FactorialTest.fact(FactorialTest.java:12)
...
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
复制代码

结果中给出了测试结果,如果出错会给出出错值和期待值以及出错的地方。

 

posted @   ShineLe  阅读(1403)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示