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的另一个依赖项。是的,这是一个想法。目前我不知道如何测试这个创建过程,但它标记了一个问题。是的,这是有意义的。如果我这样做,我还可以使用类类型matcherMatchers.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(), ... )