junit5测试教程

什么是单元测试

我们一般在编写程序的时候是怎么测试代码的呢,比如你在一个类中写了这么一个函数

public class junit {


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

当然这个函数非常简单也很短,如果你想测试一下输出的结果是不是你想要的怎么办呢,然后在main函数中调用它

public static void main(String[] args) {
    System.out.println(calcutor(1,2));

}

这样输出查看结果是不是自己想要的;

junit 替我们来测试

之前我们是自己来测试的,他需要写函数,写输出函数等一些步骤,现在让Junit替代我们做一些事情,现在我们依然是写了一个calcutor函数,我们还是想测试它,我们这样写代码,你先随便写个类,最好是跟junit一样的名字然后加个test,比如junit_test; 然后我们在里面随便写个函数,函数的名字最好是和calcutor一样后面加个test calcutor_test,然后给这个函数注解上@test 注解,然后在这个函数内写assertEquals(calcutor(1,2), 1);函数,它的作用和它的名字是一样,判断两个参数值是否一样,这个函数是junit提供的一个void函数,写一个这个类就算写完了,他是这个样子的;

public class junit_test {
    public int calcutor(int a,int b){
        return a*b;
    }
    @Test
//    @DisplayName("计算测试")
   public void cheng(){
        assertEquals(calcutor(1,2), 1);
    }
}

然后我们就可以直接点击idea的运行来运行这个类,或者这个函数,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLDnTNf6-1645001823633)(C:\Users\百宝箱\AppData\Roaming\Typora\typora-user-images\image-20220216162832268.png)]

它确实运行成功了,没有main函数,此时是没有报错,说明assertEquals(calcutor(1,2), 1);函数执行成功,两个参数的匹配是我们想要的结果,如果不一样呢,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKJen5mu-1645001823634)(C:\Users\百宝箱\AppData\Roaming\Typora\typora-user-images\image-20220216163152458.png)]

他会报错的,他会给出是哪个函数出现了错误,断言函数给出了什么错误;

分析一下junit是怎么帮我们测试的

一般的教程都是这么教的,但是很少有人说一下,他是怎么执行的,junit_test这个类,并没有main函数怎么就可以执行了呢;

这个类的地位其实和servelt是一样的,servelt是一个中间件,它的运行需要一个servelt平台,比如tomcat,juni测试类也是这样,他需要junit来平台来运行它,怎么运行它junit5和之前的版本是完全不一样的,junit5之前的版本是怎么运行的可以参考这篇文章https://juejin.im/post/6844903778957656071

在junit版本中,junit平台被分成了三个部分,junit platform他是用来运行测试类和定义测试接口的,junit jupiter它提供了测试类所需要的各种函数api,junit vintage 它提供junit可以运行junit3,4的库;

在这里我们是直接通过junit platform提供的java -jar junit-platform-console-standalone-1.8.2.jar < options> 包和命令来运行你所定义的测试类,各种集成环境eclipse, idea 等都是通过调用这个jar运行来调用你的测试类的,所以不需要main函数,而是把测试类作为junit平台的一个参数;

所以我们并不需要关注他是怎么运行的,只需要关注怎么写测试类就好;

如果用的集成环境比如idea只需要加入jar包就行,官网给出了很多个运行方式,maven也会自动调用ava -jar junit-platform-console-standalone-1.8.2.jar < options>来运行,而且规定了测试类的位置必须写在test目录下;如果你在maven项目中不需要用到测试,你把这个目录删除掉也是没问题的,为啥必须在test目录下呢,在IDEA中你可以用鼠标选择具体的类,函数,而maven咋办,所以只能约定类文件放在哪来调用他们执行;

我们只需要关注测试类怎么写就好了

测试类由什么构成呢,必须有这三部分

  1. 任意数量的函数(怎么写都行,但是需要被注解,被注解的函数才会被运行检测)

  2. 注解测试类函数的注解(只有加上了这些注解,这个类中的函数才会被运行检测)

  3. 函数内部要用到junit提供的断言函数(写了这些断言函数,junit才会根据这些断言函数的执行在控制台打印出执行的成功与否)

    public class junit_test { //测试类
        public int calcutor(int a,int b){  //普通函数,不在这个类中也无所谓
            return a*b;
        }
        @Test //测试函数注解,加上他这个函数才会被junit 平台调用
    //    @DisplayName("计算测试")
       public void cheng(){ //测试函数
            assertEquals(calcutor(1,2), 3); //含有断言的关键代码
        }
    }
    

因此我们最应该关注的就是断言函数了,assert叫做断言,他是意思的“声称一个事物就是什么”,所以断言函数的意思就是参数必须满足断言函数给出的意思,如果不满足他就会报错;

  1. 任意数量的函数可以随便写

  2. 注解测试类函数的注解有很多个,自己可以查api

    Annotations描述
    @BeforeEach在方法上注解,在每个测试方法运行之前执行。
    @AfterEach在方法上注解,在每个测试方法运行之后执行
    @BeforeAll该注解方法会在所有测试方法之前运行,该方法必须是静态的。
    @AfterAll该注解方法会在所有测试方法之后运行,该方法必须是静态的。
    @Test用于将方法标记为测试方法
    @DisplayName用于为测试类或测试方法提供任何自定义显示名称
    @Disable用于禁用或忽略测试类或方法
    @Nested用于创建嵌套测试类
    @Tag用于测试发现或过滤的标签来标记测试方法或类
    @TestFactory标记一种方法是动态测试的测试工场
  3. 断言函数也有很多个,自己可以查api

    序号方法和描述
    1void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡
    2void assertTrue(boolean expected, boolean actual) 检查条件为真
    3void assertFalse(boolean condition) 检查条件为假
    4void assertNotNull(Object object) 检查对象不为空
    5void assertNull(Object object) 检查对象为空
    6void assertSame(boolean condition) assertSame() 方法检查两个相关对象是否指向同一个对象
    7void assertNotSame(boolean condition) assertNotSame() 方法检查两个相关对象是否不指向同一个对象
    8void assertArrayEquals(expectedArray, resultArray) assertArrayEquals() 方法检查两个数组是否相等
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值