Java 如何用不带';不能实现'equals'?

Java 如何用不带';不能实现'equals'?,java,spring,unit-testing,mockito,spring-data-jpa,Java,Spring,Unit Testing,Mockito,Spring Data Jpa,我正在为SystemLoggingService编写单元测试,并模拟对其存储库的所有调用。 我将Spring与JPA存储库一起使用 @Repository public interface SystemLoggingRepository extends PagingAndSortingRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> { } 这对单元测试的质量有多差,

我正在为
SystemLoggingService
编写单元测试,并模拟对其存储库的所有调用。 我将
Spring
JPA
存储库一起使用

@Repository
public interface SystemLoggingRepository extends PagingAndSortingRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {
}
这对单元测试的质量有多差,或者这是常见的做法?有什么不同的方法来解决这个问题?
规范
对象是一个Spring框架类。仅添加
equals()
方法不是一个选项。

您可以尝试使用以下方法捕获规范:

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

您可以在这里找到更多信息:

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

是的,这是一个想法。目前我不知道如何测试这个创建过程,但它标记了一个问题。是的,这是有意义的。如果我这样做,我还可以使用类类型matcher
Matchers.any(Specifications.class)
进行模拟,而不会出现任何问题。“我看得对吗?”我同意。您甚至可以配置新的依赖项,以返回一个模拟的
规范
,并验证这个具体的对象是否被传递…@HerrDerb只要您的代码执行它应该执行的操作,就没有“错误”或“正确”,只有“有目的的”和“不适当的”;o)
ArgumentCaptor<Specifications> specificationsCaptor = ArgumentCaptor.forClass(Specifications.class);
BDDMockito.given(systemLoggingRepository.findAll(specificationsCaptor.capture(), Matchers.eq(pageRequest))).willReturn(...)
Specifications capturedSpecifications = specificationsCaptor.getValue();
assertThat(capturedSpecifications.getSomeProperty(), ... )