首页 > 解决方案 > 如何在服务层使用相同的方法模拟 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 ;
    }

标签: javaspring-bootjunitmockito

解决方案


要测试您的数据层,您可以使用 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,但主要思想是一样的。)。也许它会帮助你。


推荐阅读