java - 如何在服务层使用相同的方法模拟 dao 层?
问题描述
我有点困惑如何测试我的 dao 层,它包含与我的服务层相同的方法。我设法测试了我的服务层并坚持弄清楚如何测试我的 dao 层。
@Repository
public class DaoImpl implements Dao {
@Autowired
private NamedParameterJdbcTemplate template;
@Override
public Set<MyForm> findSomething(String title, String name, ZonedDateTime datetime) {
String sql= "SELECT * from myTable WHERE title= :d_title AND name = :d_name AND mydatetime= :d_datetime";
SqlParameterSource namedParameters = new MapSqlParameterSource()
.addValue("d_title", title)
.addValue("d_name",name)
.addValue("d_datetime",datetime.withZoneSameInstant(ZoneId.of("UTC")).toOffsetDateTime());
List<MyForm> myForm= template.query(sql, namedParameters, new MyRowMapper());
Set<MyForm> setMyForm = new HashSet<MyForm>(myForm);
return setMyForm ;
}
解决方案
要测试您的数据层,您可以使用 Spring Boots Testslice DataJdbcTest
。
@DataJdbcTest
public class DaoImplIT {
@Autowired
private DaoImpl daoImpl;
@Test
void test() {
// prepare your database
// call the method to test
// make assertions about the result
}
}
在这个测试片中,Spring Boot 将配置所有与通过 JDBC 访问数据相关的 bean。如果您提供内存数据库(例如 H2),它将自动使用。
这种测试的主要思想是通过插入数据来准备数据库,然后使用存储库 bean 来查询它们。
我写了一篇关于这个的博客文章(好吧,它是@DataJpaTest,但主要思想是一样的。)。也许它会帮助你。
推荐阅读
- vue.js - Vue - 如何显示单击的项目和数组的上一个/下一个项目
- react-native - 谷歌标签管理器电子商务分析反应原生
- javascript - 如何从不同的 HTML 文件调用模式
- office365 - SCCM 卸载 Project Pro,卸载后仍检测到应用程序
- java - 在数组中的每个第二个元素之后添加数据
- ios - 快速将 FSCalendar 转换为伊斯兰 Umm Al-qura 日历
- reactjs - 纱线安装删除几个包
- python-3.x - 如何在python中停止它之外的函数
- teamcity - 为什么 Teamcity 无法识别机器人命令?
- postgresql - 用户“postgres”的密码身份验证失败,用户“postgres”没有密码