gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:56 26 4
gpt4 key购买 nike

我正在为 SystemLoggingService 编写单元测试并模拟对其存储库的所有调用。我正在使用 SpringJPA存储库。

@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 object 是一个 Spring 框架类。仅添加 equals() 不是一个选项方法。

最佳答案

您可以尝试通过以下方式获取规范:

ArgumentCaptor<Specifications> specificationsCaptor = ArgumentCaptor.forClass(Specifications.class);
BDDMockito.given(systemLoggingRepository.findAll(specificationsCaptor.capture(), Matchers.eq(pageRequest))).willReturn(...)

然后验证捕获的值:

Specifications capturedSpecifications = specificationsCaptor.getValue();
assertThat(capturedSpecifications.getSomeProperty(), ... )

您可以在此处找到更多信息:https://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#15

关于java - 如何使用未实现 `equals` 的参数模拟方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45919548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com