本文共 2761 字,大约阅读时间需要 9 分钟。
在进行单元测试时,最好避免与实际数据库耦合,以确保测试在任何环境下都能顺利通过。本文将详细介绍如何通过h2内存数据库、liquibase初始化测试数据以及embedded-redis等技术手段,打破环境依赖。
本项目主要采用以下技术和工具:
项目采用模块化设计,主要包含以下部分:
项目依赖管理文件(POM.xml)中定义了以下关键库的版本:
测试环境配置文件(application-test.yml)中定义了以下关键参数:
Liquibase配置文件中主要定义了以下内容:
@Configuration@ConditionalOnProperty(prefix = "test.conditional", name = "enabled", havingValue = "true")public class TestRedisConfig { @Bean public LettuceConnectionFactory redisConnectionFactory(RedisProperties redisProperties) { return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort()); } @Bean public RedisTemplateredisTemplate(LettuceConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); return template; }}
@Configuration@ConditionalOnProperty(prefix = "test.conditional", name = "enabled", havingValue = "true")public class TestRedisServiceConfig { private RedisServer redisServer; public TestRedisServiceConfig(RedisProperties redisProperties) { this.redisServer = RedisServer.builder().port(redisProperties.getPort()) .setting("maxmemory 128M") .build(); } @PostConstruct public void postConstruct() { redisServer.start(); } @PreDestroy public void preDestroy() { redisServer.stop(); }}
@SpringBootTest(classes = FreedomApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)@ActiveProfiles("test")@Stepwisepublicpublic interface CodeBootTest {}
通过执行 mvn test
命令,可以获取以下测试报告:
项目代码存储在以下仓库中:[项目链接](注:请勿直接填写外部链接,建议替换为具体的代码仓库路径)
转载地址:http://ythwz.baihongyu.com/