1. 基于Spring的测试
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>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
基于spring的依赖项
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</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注解
@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():断言不会抛出异常
– 其它