如何模拟存储库中的持久数据,直到用Spring Boot完成测试

时间:2019-04-30 14:47:23

标签: spring-boot spring-data-jpa mockito h2

要实施我们的测试,我需要从存储库中检索保存的数据。由于该存储库只是一个模拟的存储库,因此我找不到这些数据。

这是我写的代码:

@Mock
private UserRepository userRepository;

public void functionTest(){
  User user = new User();
  user.setUsername("username");
  userRepository.save(user);
  List<User> users = functionIwantToTest();
  assertThat(users.size(), is(1));
}

public void functionIwantToTest(){
  return userRepository.findAll();
}

测试失败,因为该功能将无法在存储库中找到任何用户(保存功能不会将数据持久存储在存储库中)

这是一个简单的示例,我真正想要的是测试一个将从UserRepository中检索特定用户的函数,因此我需要在此处模拟一些数据。

我使用PostgreSQL作为运行时数据库。运行测试时,是否有可能自动使用内存数据库(例如h2数据库)?这样我就可以从数据库中保存和检索数据,而无需@Mock注释?

2 个答案:

答案 0 :(得分:1)

是的,您可以在测试期间使用H2。首先在您的my_dict = {'T':(2,3),'z':(5,6)} print(pd.DataFrame(my_dict))

中添加对H2的依赖
pom.xml

要在测试中启用H2,您可以添加<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency> (或<your-project>/src/test/resources/application.properties

application.yaml

然后,您需要h2.datasource.url=jdbc:h2:mem:somedatebase;DB_CLOSE_DELAY=-1 h2.datasource.username=sa h2.datasource.password= @Autowired。完成之后,我可以成功运行您的示例测试

UserRepository

答案 1 :(得分:0)

模拟对象是接口或类的虚拟实现,您可以在其中定义某些方法调用的输出。

您需要定义规则,例如:

Mockito.when(userRepository.findAll()).thenReturn(Collections.singletonList(user));