接口测试中使用JpaRepository做数据库层校验

Posted 测码奔跑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口测试中使用JpaRepository做数据库层校验相关的知识,希望对你有一定的参考价值。

背景

接口测试脚本中,对于数据库内容的校验一直比较麻烦。

石器时代 定义数据源,创建JdbcTemplate,然后直接拼接SQL来查询。通用性很差。 

工业革命 使用mybatis,定义数据源,定义domain,定义sql映射的xml文件,定义具体操作的DAO层。搭建起来很费时间,后期也经常需要维护。

现代化 用spring-data-jpa,简简单单继承JpaRepository,遵循spring data的规范定义查询接口,无需写实现类就可使用,大大减少数据访问层(DAO)的开发量。

实践

完整的介绍一下使用JpaRepository的过程。

第一步

首先定义表结构对应的PO,以下图这张表为例。 接口测试中使用JpaRepository做数据库层校验 

定义TestPO,注意通过注解的方式,把表名、字段名设置下。

@Data@Entity@Table(name = "test")
public class TestPO {      
   @Id    
   @GeneratedValue
   
   private
Long id;  
 
   @Column(name = "task_id")    
   private Long taskId;  
 
   @Column(name = "type")    
   private Integer type;    

   @Column(name = "result")    
   private String result;    

   @Column(name = "success")    
   private Boolean success;  
 
   @Column(name = "gmt_create")    
   @CreatedDate    private Date gmtCreate;
   
   @Column(name = "gmt_modified")    
   @LastModifiedDate    private Date gmtModified; }


第二步

这里是最重要的一步:定义具体的查询接口。只需要继承JpaRepository就可。

public interface TestRepository extends JpaRepository<TestPO, Long> {
}

可以看到JpaRepository中只提供了一些简单的操作,并不满足我们的需求。 接口测试中使用JpaRepository做数据库层校验

就如开头所说的,JpaRepository的强大在于只要遵循spring data的规范把数据查询的接口定义出来就可使用,无需写实现类。spring data的规范参考。按照Spring Data的规范的规范,查询方法以find | read | get 开头,涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。

以testPO为例,常用的需求是根据taskId来查询多条testPO记录来校验。

根据taskId来查询所有testPO记录

public List<TestPO> findByTaskId(Long taskId);

有时候,我们只需要最新的那条记录,则可以这么写

public TestPO findFirstByTaskIdOrderByGmtCreateDesc(Long taskId);

YY下,我们需要多个条件同时满足来查询

public List<TestPO> findByTaskIdAndType(Long taskId,Integer type);

用法非常多,直接上一份前辈的总结 

第三步

大头都做完了,剩下的就是定义datasource和创建实例了。

定义datasource,根据各自的数据库环境来定义。

创建实例:

@Configuration
@EntityScan
(basePackageClasses = TestPO.class)
@EnableJpaRepositories(basePackageClasses = TestRepository.class)
public class JPAConfig {  
 
   @Autowired    public DataSource testDataSource; }    


第四步

剩下的就是具体的使用,以一个单测为例。

   @Resource
   private TestRepository testRepository; 
   @Test    public void test2(){        TestPO one = testRepository.findFirstByTaskIdOrderByGmtCreateDesc(183988004431071L);        System.out.println(one.getType());    }

更多测试技术文章,微信扫以下二维码,欢迎关注

测码奔跑-让测试技术奔跑起来

以上是关于接口测试中使用JpaRepository做数据库层校验的主要内容,如果未能解决你的问题,请参考以下文章

当监视调用 save 方法的 JPARepository 时返回 null

Spring Boot JpaRepository 保存调用似乎没有做任何事情

Spring Data JPA实现简单条件查询

springData__jpa对数据库进行操作---dao接口和 测试类

spring mvc 的jpa JpaRepository数据层 访问方式汇总

spring boot系列spring boot 配置spring data jpa (查询方法)