要实施我们的测试,我需要从存储库中检索保存的数据。由于该存储库只是一个模拟的存储库,因此我找不到这些数据。
这是我写的代码:
@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注释?
答案 0 :(得分:1)
是的,您可以在测试期间使用H2。首先在您的my_dict = {'T':(2,3),'z':(5,6)}
print(pd.DataFrame(my_dict))
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));