简单介绍:
其实Spring Boot的测试在之前我们就已经使用过了,只不过当时我们只是使用,并不知道他具体是怎么实现的,我们稍微介绍一下他在做测试的时候是怎么实现的:
SpringBoot的测试:
在test文件夹下面,他有一个包,这个包名和我们的引导类的报名其实是一样的,并且在和引导类在同一个包下面就有一个后缀为Tests的Java类,这个类就是我们的测试类,这个类只是一个模板而已,我们可以用也可以不用,我们现在就创建一个自己的测试类,我们不用他这个:
我们从头开始创建一个测试类,我们从头开始构建这个类,这样我们就知道这个类是如何来的,以及他是由什么构成的:
为了方便记忆,我们依旧从之前Spring项目中的测试类开始引入,在之前我们写Spring的测试类的时候,我们首先写了两个注解:
这里的报错不用管,因为我没有导包,关键在于我们看这两个注释,我们在之前写Spring的测试类的时候是不是有印象我们写过,这两个注释是什么意思呢?
@Runwith:指定Spring的运行器,这个运行器的概念不是很重要,我们在后期如果有机会再去讨论这个,这个是固定格式
@Configuration:指定Spring的配置文件或者配置类。 这才是最重要的一个注解。
这个注解的作用就是将我们的环境引入进来,环境自然就是我们的Spring容器,我们是测试也是在Spring容器环境下进行的,所以我们需要将Spring容器引入进来,但是在他给我们的测试类模板中我们并没有看到这两个注释,难道说这个测试不需要使用Spring容器吗?
肯定是使用到了Spring的容器,但是我们直观的看,他并没有引入任何的配置文件,那么就需要想到它是使用的引导类中的Spring容器。它通过扫描包的方式,在同一个包下扫描到引导类,然后通过引导类找到并加载Spring容器的方式加载容器,并从容器中获取Bean示例的方式进行测试。
注意这里测试类和引导类的包要一样,那么如果我们创建的自己的测试类,他和引导类不在一个包下会怎么样呢?
我们把我们自己写的测试类放在其他包下,注意上图中的包,我们放在了MyTest包下面,这时候他和 引导类就不在同一个包下,这时候它会如何寻找Spring容器呢?
他找不到容器,并且抛出了一个异常,主要的内容是红色框里面的洋文,这个洋文的意思是:找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration或@SpringBootTest(class=…)。这一看明白了,找不到配置文件或者配置类,你要么用@ContextConfiguration给我指明你容器的位置,要么用@SpringBootConfiguration这个注解给我指出来也行。那么怎么指出来呢,其实就写上我们引导类的类就可以了,因为我们就是通过引导类去帮我们加载Spring容器,所以,如果我们要定义一个测试类,这个测试类和引导类并不在一个包下,那么我们就需要进行一下配置才能让他成功运行:
这样我们就可以让我们自己写的测试类找到Spring容器的位置并顺利的加载Spring容器进行测试,看运行结果:
在现阶段,我们只需要知道SpringBoot的测试类需要放在和引导类一个包或者它的子包下,并且在类上添加@SpringBootTest注解。如果自己写的类并不在引导类的包下或者它的子包下,那么就需要通过在@SpringBootTest的class属性中指定引导类的方式指向引导类,通过引导类找到Spring的容器,加载容器后获取Bean示例进行测试。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153257.html