我正在为 SystemLoggingService
编写单元测试,并模拟所有对其存储库的调用。
我在使用 Spring
和 JPA
存储库。
@Repository
public interface SystemLoggingRepository extends PagingAndSortingRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {
}
为了对服务方法
findAll(Searchable searchable, Pageable pageable)
进行单元测试,我需要模拟存储库方法findAll(Specification<T> spec, Pageable pageable)
。正如大家所看到的,
Searchable
对象在服务逻辑中被转换为JPA Specifications
对象。问题是,我的服务逻辑将传递给存储库方法的JPA的
Specifications
类没有实现equals()
。换句话说,我无法非常精确地模拟存储库方法,因为我必须使用
Matchers.any(Specifications.class)
。BDDMockito.given(systemLoggingRepository.findAll(Matchers.any(Specifications.class), Matchers.eq(pageRequest))).willReturn(...)
这对于单元测试的质量有多大影响?这是常见做法吗?有没有其他解决方案?
Specifications
对象是Spring框架的一个类,不能直接添加 equals()
方法。
Matchers.any(Specifications.class)
进行模拟而不会出现任何问题。我看得对吗? - Herr DerbSpecifications
的模拟对象,然后验证这个具体的对象是否被传递... - Timothy Truckle