在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。