Java Spring Test
基于Spring的测试
1.Spring Test
● Spring Test主要解决了以下问题:
– 在普通测试环境下,当需要使用Spring时,需要手动加载Spring配置,且手动从
Spring容器中获取对象,使用Spring Test后,只需要通过注解指定Spring配置类,
在Spring容器中的对象均可自动装配
– 通过@Sql等注解,对数据库编程的测试提供了更好的支持
● 使用Spring Test时需添加的依赖项为:spring-test
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.14</version>
</dependency>
● 注意:你仍需另外添加测试的依赖项
● 注意:需要与其它的spring-???依赖项使用完全相同的版本
● 在编写测试时,在测试类上添加@SpringJUnitConfig注解,并在此注解
中配置Spring的配置类作为参数,则执行此类的任何测试方法之前,都会
加载这些Spring配置类,并且,在编写测试时,只要是在Spring容器中
存在的对象,都可以自动装
● 例如:
@SpringJUnitConfig(SpringConfig.class)
public class MybatisSpringTests {
@Autowired
Environment env;
@Test
public void contextLoads() {
System.out.println(env.getProperty("datasource.url"));
System.out.println(env.getProperty("datasource.driver"));
System.out.println(env.getProperty("datasource.username"));
System.out.println(env.getProperty("datasource.password"));
}
}
2.@Sql注解
● 当添加了spring-test依赖后,可以在测试时使用@Sql注解,以加载某
些.sql脚本,使得测试之前或之后将执行这些脚本!
● 使用此注解主要是为了保障可以反复测试,并且得到预期的结果!例如执
行删除的测试时,假设数据是存在的,第1次删除可以成功,但是在这之
后的测试将不会成功,因为数据在第1次测试时就已经被删除!则可以编
写一个.sql脚本,通过脚本向数据表中插入数据,并在每次测试之前执行
此脚本,即可保证每次测试都是成功的!
● 此注解可以添加在测试类上,则对当前测试类的每个测试方法都是有效的
● 此注解也可以添加在测试方法上,则只对当前测试方法是有效的
● 如果测试类和测试方法上都添加了此注解,则仅测试方法上的注解会生效
● 此注解除了配置需要执行的.sql脚本以外,还可以通过executionPhase
属性配置其执行阶段,例如取值为Sql.ExecutionPhase.AFTER_TEST_METHOD时将使得.sql脚本会在测试方法之后被执行
● 每个测试方法可以添加多个@Sql注解
● 例如
@Test
@Sql(scripts = {"classpath:truncate.sql"
,
"classpath:insert_data.sql"})
@Sql(scripts = {"classpath:truncate.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void testDeleteByIdSuccessfully() {
Long id = 1L;
int rows = adminMapper.deleteById(id);
Assertions.assertEquals(1, rows);
}
● insert_data.sql脚本示例:
insert into ams_admin (username, password) values ('admin001'
,
'123456');
insert into ams_admin (username, password) values ('admin002'
,
'123456');
insert into ams_admin (username, password) values ('admin003'
,
'123456');
insert into ams_admin (username, password) values ('admin004'
,
'123456');
insert into ams_admin (username, password) values ('admin005'
,
'123456');
● truncate.sql脚本示例:
truncate ams_admin
3.断言
● 断言,如同中文的字面意思,可以理解为“一口咬定”,在测试中,表现为预判测试结果
● 在执行测试时,应该使用断言对测试结果进行预判,而不是使用输出语句结合肉眼观察结果,这样才更符合自动化测试的标准(在自动化测试中,可以一键执行项目中的所有测试方法,并将测试结果汇总到专门的测试报告文件中)
● 提示:断言并不是Spring系列框架的功能,而是测试框架的功能
● 通过调用Assertions类中的静态方法可以对测试结果进行断言,常用方法
有:
– assertEquals():断言匹配(相等)
– assertNotEquals():断言不匹配(不相等)
– assertTrue():断言为“真”
– assertFalse():断言为“假”
– assertNull():断言为null – assertNotNull():断言不为null – assertThrows():断言将抛出异常
– assertDoesNotThrow():断言不会抛出异常
– 其它