java – 如何使用不实现`equals`的参数模拟方法调用?

我正在为SystemLoggingService编写单元测试并模拟对它的存储库的所有调用.
我正在使用带有JPA存储库的Spring.

@Repository
public interface SystemLoggingRepository extends PagingAndSortingRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {
}

对于服务方法findAll(可搜索的可搜索,可分页的可分页)的单元测试,我需要模拟存储库方法findAll(规范< T>规范,Pageable pageable)

正如人们所见,Searchable对象被转换为服务逻辑中的JPA规范对象.

问题是我的服务逻辑将传递给存储库方法的JPA规范类没有实现equals().

换句话说,我不能非常精确地模拟存储库方法,因为我必须使用Matchers.any(Specifications.class)

BDDMockito.given(systemLoggingRepository.findAll(Matchers.any(Specifications.class), Matchers.eq(pageRequest))).willReturn(...)

这对于单元测试的质量有多糟糕,还是这种常见的做法?对这个问题有什么不同的解决方法?
Specifications对象是一个Spring框架类.不能只添加equals()方法.

解决方法:

除了@VolodymyrPasechnyk的答案之外,你可能会考虑将创建规范对象的责任提取到一个单独的类,这将是对你的CUT的另一个依赖.

上一篇:java – 在测试中使用@MockBean强制重新加载Application Context


下一篇:如何使用构造函数注入来模拟类