关于@RunWith注解

在JUnit中有很多个Runner,他们负责调用你的测试代码,每一个Runner都有各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。

如果我们只是简单的做普通Java测试,不涉及Spring Web项目,你可以省略@RunWith注解,这样系统会自动使用默认Runner来运行你的代码。

@RunWith的相关概念

首先要分清几个概念:

  • 测试方法

  • 测试类

  • 测试集

  • 测试运行器

其中测试方法就是用@Test注解的一些函数。测试类是包含一个或多个测试方法的一个Test.java文件测试集是一个suite,可能包含多个测试类。测试运行器则决定了用什么方式偏好去运行这些测试集/类/方法。当类被@RunWith注解修饰(放在测试类上使用),或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不使用JUnit默认的运行器。

@RunWith的分类

  • @RunWith(JUnit4.class) 指用JUnit4测试工具来运行测试是junit4的默认运行器。

  • @RunWith(SpringJUnit4ClassRunner.class):指让类运行在Spring的测试环境,以便测试开始时自动创建Spring应用上下文,并使用JUnit4测试工具运行测试。

  • @RunWith(SpringRunner.class):继承了 @RunWith(SpringJUnit4ClassRunner.class) ,用法相同,名字简短而已。

  • @RunWith(Suite.class):一套测试集合(suite指一套,使用RunWith测试套件)

因此,@RunWith(SpringRunner.class)和@RunWith(SpringJUnit4ClassRunner.class)在idea环境下是等价的。

⚠️注意:在Idea环境中,如果不添加额外选项,默认使用JUnit4测试工具来进行测试。

一般来说,使用@RunWith(SpringRunner.class)注解即可。

为什么IDEA编译器里边不需要

注意点:发现idea中springboot项目不加@RunWith仍然可以运行,所以比较疑问到底加不加,从网上获取到比较比较准确的说法如下:

标准测试类里是要有@RunWith的,作用是告诉java你这个类通过用什么运行环境运行,例如启动和创建spring的应用上下文。否则你需要为此在启动时写一堆的环境配置代码

你在IDEA里去掉@RunWith仍然能跑是因为在IDEA里识别为一个JUNIT的运行环境,相当于就是一个自识别的RUNWITH环境配置。但在其他IDE里并没有。

所以,为了你的代码能在其他IDE里边正常跑,建议还是加@RunWith

文章作者: GeYu
文章链接: https://nuistgy.github.io/2023/02/16/关于@Runwith/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yu's Blog