【发布时间】:2018-09-22 06:05:00
【问题描述】:
我正在尝试对与此类似的服务类进行单元测试:
@Service
public class SomeQueryService {
private final SomeRepository repository;
public SomeQueryService(SomeRepository repository) {
this.repository = repository;
}
public void doSomething() {
// code doing some magic
}
}
SomeRepository 是简单的存储库接口,扩展了JpaRepository 接口。
我想做的是对该服务进行单元测试以验证它是否正常工作。
我不想使用 mockito 来模拟存储库行为,而是希望有一些内存中的实现(在列表或映射上)来模仿数据库行为。
Spring 是否提供了这种虚假的实现?
我想避免自己对此类存储库进行存根实现,因为我将在许多其他地方使用此类测试。
【问题讨论】:
-
不,它不会...使用Mockito 创建动态模拟。
-
正如我上面提到的,我不想使用 mockito,我希望 stub 实现来模拟真实的存储。用大量的 doReturn().when() mumbo-jumbo 来维护测试太费力了......
-
在模拟中包含存根会得到什么?除了调用之外,您没有测试任何东西......如果您有一个糟糕的存根实现,那么您的测试失败不是因为您的服务,而是因为您糟糕的测试实现。如果这是您真正想要使用内存数据库进行测试的内容,并让 Spring Data JPA 创建您的存储库实例。
-
我想专注于测试我的测试代码中的服务逻辑,我不想有模拟配置行和验证与存储库的交互。当服务正在保存对象时,我希望使用 repository.findAll() 来访问它,而不是使用veryfy(repo).save(...) 验证对象是否保存。
-
它是 1 行代码......而且你不应该使用相同的机制来存储和验证。当调用
save时,您现在会自动假定findAll工作正常。除了使用 Mockito 之外,如果你真的想的话,你甚至可以(如果你愿意的话)创建一个通用的存根。
标签: java spring unit-testing spring-data-jpa