持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
前言
由于在工作用经常会遇到单元测试,但是关于单元测试的上下问题与运行环境不够了解,总是出现注入Bean为空的情况,为了提高效率,本次将对单元测试的相关知识进行总结。
单元测试概念
- 单元测试(Unit Test),是一段自动化的代码,用来调动被测试的方法或类,而后验证基于该方法或类的逻辑行为的一些假设。单元测试几乎总是用单元测试框架来写的。它写起来很顺手,运行起来不费时。它是全自动的、可信赖的、可读性强的和可维护的。
Java单元测试 Junit
Java提供了Junit Api 帮助我们继续进行单元测试,如下图并提供了一些注解帮助我们进行测试:
举个简单的例子:通过如下@Test方法,我们可以执行程序测试某段代码是否符合预期:
@Test
public void testMethod() {
// 测试代码
}
上述方法相信大家都能熟练使用,但是在spring中,我们测试时会依赖一些运行环境以即Spring上下文环境,下面我们看看Spring中如何单元测试。
Spring单元测试
junit不会管我们是否采用spring框架 在执行测试方法时,junit根本不知道我们是不是使用了spring框架 所以也就不会为我们读取配置文件/配置类创建spring核心容器. 因此在Spring单元测试中,我们主要关注以下两个点,如何指定Spring的运行环境以及注入我们需要Bean。 一般我们使用下面两个注解实现:
- @RunWith:用于指定junit运行环境,@RunWith(SpringJUnit4ClassRunner.class)的作用是取代JUnit默认的Runner。默认的Runner不会创造Spring容器,新的Runner则会。
- @ContextConfiguration:用于指定spring配置环境,@ContextConfiguration用于指定配置类或xml配置文件。locations属性(和value等价)用于指定xml配置文件,classes属性用于指定配置类。
如下在通过@RunWith(SpringJUnit4ClassRunner.class)创造Spring容器后,通过@ContextConfiguration加载ApiContext.class配置类,这样就可以通过@Autowired注入配置类中加载的Bean啦。 当然还有一个@SpringBootTest注解可以达到类似的效果哦,有兴趣的同学可以自行了解测试下。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApiContext.class})
public class lTest {
@Autowired
private XXXXApiService XXXApiService;
@Test
public void Test() {
XXXApiService.createTigerConsumerGroup(req)
}
}