JUnit4集成测试NamedJdbcTemplate:连接真实库测试Repository方法
配置JUnit4测试连接真实数据库测试RaRepository
测试类正确注解配置
因为你需要连接真实数据库并加载完整的Spring上下文,不要使用@DataJdbcTest(它默认使用内存数据库且仅加载JDBC相关Bean),而是使用以下注解组合:
@RunWith(SpringRunner.class) @SpringBootTest // 可选:添加该注解让测试结束后自动回滚事务,避免污染数据库 @Transactional public class RaRepositoryTest { @Autowired private RaRepository raRepository; @Test public void findFieldsByItemId(){ List<String> itemsId = new ArrayList<>(); itemsId.add("VZ203"); List<raAttribute> raAttlist = raRepository.findFieldsByItemId(itemsId); Assert.assertEquals(2, raAttlist.size()); } }
注解说明
@RunWith(SpringRunner.class):指定JUnit4使用Spring测试运行器,负责加载Spring应用上下文。@SpringBootTest:加载完整的Spring Boot应用上下文,包含数据源、Repository等所有Bean实例,确保能连接真实数据库。@Transactional(可选):测试方法执行后自动回滚事务,避免测试操作修改真实数据库数据;如果需要保留测试数据,可移除该注解。
数据源配置确保生效
- 确保测试环境的配置文件(
src/test/resources/application.properties)包含正确的数据库连接信息,示例:
spring.datasource.url=jdbc:mysql://localhost:3306/your_db_name spring.datasource.username=db_user spring.datasource.password=db_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
如果测试目录下没有该文件,Spring Boot会默认读取主目录(src/main/resources)下的application.properties配置。
代码注意事项
- 你的
RaRepository中rs.getString(ps_name)的ps_name需是数据库表abc的有效列名(比如"name"),否则会抛出SQL列不存在的异常,建议定义为常量避免拼写错误。 - 确保
raAttribute类有对应的构造函数能接收查询返回的列值,且类名符合Java规范(首字母大写,建议改为RaAttribute)。
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

