8
如何测试Spring Data存储库?
我想要UserRepository借助Spring Data创建的存储库(例如)。我是spring-data的新手(但不是spring),并且使用了本教程。我选择的用于处理数据库的技术是JPA 2.1和Hibernate。问题是我对如何为这样的存储库编写单元测试一无所知。 让我们以create()方法为例。当我首先进行测试时,应该为它编写一个单元测试-这就是我遇到的三个问题: 首先,我如何将an的模拟注入接口EntityManager的不存在的实现中UserRepository?Spring Data将基于此接口生成一个实现: public interface UserRepository extends CrudRepository<User, Long> {} 但是,我不知道如何强制它使用EntityManager模拟和其他模拟-如果我自己编写实现,则可能会有一个setter方法EntityManager,允许我将模拟用于单元测试。(对于实际的数据库连接性,我有一个JpaConfiguration类,用@Configuration和注释,该类以@EnableJpaRepositories编程方式定义了,等等的Bean DataSource,但是存储库应该易于测试,并且可以覆盖这些内容)。EntityManagerFactoryEntityManager 其次,我应该测试互动吗?我很难弄清楚应该调用EntityManager和的什么方法Query(类似于verify(entityManager).createNamedQuery(anyString()).getResultList();),因为编写实现的不是我。 第三,首先我应该对Spring-Data生成的方法进行单元测试吗?据我所知,第三方库代码不应该进行单元测试-只有开发人员自己编写的代码才应该进行单元测试。但是,如果这是真的,但它仍然带来的第一个问题回到场景:比方说,我有一对夫妇的自定义方法为我的仓库,为此,我会写的实现,我怎么注入我的嘲笑EntityManager,并Query进入决赛,产生仓库? 注:我将使用测试驱动我的仓库都集成和单元测试。对于我的集成测试,我使用的是HSQL内存数据库,而显然我没有使用数据库进行单元测试。 可能是第四个问题,在集成测试中测试正确的对象图创建和对象图检索是否正确(例如,我使用Hibernate定义了复杂的对象图)? 更新:今天我继续尝试模拟注入-我创建了一个静态内部类来允许模拟注入。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @Transactional @TransactionConfiguration(defaultRollback = true) public class UserRepositoryTest { @Configuration @EnableJpaRepositories(basePackages = "com.anything.repository") static class TestConfiguration { @Bean public EntityManagerFactory entityManagerFactory() { return mock(EntityManagerFactory.class); } @Bean public EntityManager entityManager() …