spring-test

2年前 (2022) 程序员胖胖胖虎阿
253 0 0

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():断言不会抛出异常

– 其它

版权声明:程序员胖胖胖虎阿 发表于 2022年11月2日 上午7:16。
转载请注明:spring-test | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...