小编use*_*032的帖子

如何测试Spring Data存储库?

我想要一个UserRepository在Spring Data的帮助下创建的存储库(比方说).我是spring-data(但不是spring)的新手,我使用的是本教程.我选择处理数据库的技术是JPA 2.1和Hibernate.问题是我对如何为这样的存储库编写单元测试一无所知.

我们以create()方法为例.当我正在测试时,我应该为它编写单元测试 - 这就是我遇到的三个问题:

  • 首先,如何将一个模拟注入EntityManager一个UserRepository接口的不存在的实现?Spring Data将基于此接口生成实现:

    public interface UserRepository extends CrudRepository<User, Long> {}
    
    Run Code Online (Sandbox Code Playgroud)

    但是,我不知道如何强制它使用EntityManager模拟和其他模拟 - 如果我自己编写了实现,我可能会有一个setter方法EntityManager,允许我使用我的模拟进行单元测试.(至于实际的数据库连接,我有一个JpaConfiguration类,有注释@Configuration@EnableJpaRepositories,通过编程定义豆类DataSource,EntityManagerFactory,EntityManager等等-但库应该是测试友好,并允许重写这些事情).

  • 其次,我应该测试互动吗?这是我很难找出什么方法EntityManagerQuery应该被称为(类似于那个verify(entityManager).createNamedQuery(anyString()).getResultList();),因为它是不是我是谁写的实施.

  • 第三,我是否应该首先对Spring-Data生成的方法进行单元测试?据我所知,第三方库代码不应该进行单元测试 - 只有开发人员自己编写的代码应该进行单元测试.但如果这是真的,它仍然会将第一个问题带回现场:比方说,我的存储库有几个自定义方法,我将编写实现,如何注入我的模拟EntityManagerQuery进入最终,生成库?

注:我将使用测试驱动我的仓库集成和单元测试.对于我的集成测试,我使用的是HSQL内存数据库,显然我没有使用数据库进行单元测试.

也许第四个问题,在集成测试中测试正确的对象图创建和对象图检索是否正确(比方说,我有一个用Hibernate定义的复杂对象图)?

更新:今天我继续尝试模拟注入 - 我创建了一个静态内部类来允许模拟注入.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@Transactional
@TransactionConfiguration(defaultRollback = true)
public class UserRepositoryTest {

@Configuration
@EnableJpaRepositories(basePackages = …
Run Code Online (Sandbox Code Playgroud)

unit-testing jpa spring-data spring-data-jpa

119
推荐指数
8
解决办法
13万
查看次数

标签 统计

jpa ×1

spring-data ×1

spring-data-jpa ×1

unit-testing ×1