有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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 ;
    }

共 (1) 个答案

  1. # 1 楼答案

    要测试数据层,可以使用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
        }
    }
    

    在这个testslice中,Spring引导将配置与通过JDBC访问数据相关的所有bean。如果您提供内存中的DB(例如H2),它将自动使用

    这种测试的主要思想是通过插入数据来准备数据库,然后使用存储库bean来查询它们

    我写了一篇blog post关于这一点(好吧,它是@DataJpaTest,但主要思想是一样的)。也许对你有帮助