为了测试另一个对象,我试图在服务层中对一种方法进行存根:
@SpringBootTest
@RunWith(JUnitPlatform.class)
class WorkreportCrudFacadeTest {
private static Logger LOGGER = LogManager.getLogger(WorkreportCrudFacadeTest.class);
@Test
public void detailTest() {
final AccessRightsService ars = Mockito.mock(AccessRightsService.class);
final SystemPriceSettingService spss = Mockito.mock(SystemPriceSettingService.class);
final WorkreportActivityRepository wrar = Mockito.mock(WorkreportActivityRepository.class);
final WorkreportRepository wrr = Mockito.mock(WorkreportRepository.class);
final DomainObjectTools dot = Mockito.mock(DomainObjectTools.class);
final ApplicationEventPublisher aep = Mockito.mock(ApplicationEventPublisher.class);
Mockito.when(ars.hasEmployeeRightsToWorkReport(
ArgumentMatchers.any(Employee.class), ArgumentMatchers.any(Workreport.class)
)
).thenReturn(true);
final WorkreportCrudFacade s = new WorkreportCrudFacade(ars, spss, wrar, wrr, dot, aep);
final EmployeeId employeeId = new EmployeeId(154149756298300L);
final WorkreportId workreportId = new WorkreportId(154149757395700L);
final Workreport detail = s.detail(workreportId, employeeId);
LOGGER.debug("Detail: {}", detail);
}
}
以及调用测试方法的方法:
public Workreport detail(final WorkreportId workreportId, final EmployeeId employeeId) {
final Workreport workreport = domainObjectTools.getWorkreportOrThrowNotFoundException(workreportId);
final Employee viewer = domainObjectTools.getEmployeeOrThrowNotFoundException(employeeId);
boolean hasRights = accessRightsService.hasEmployeeRightsToWorkReport(viewer, workreport);
LOGGER.debug("Has rights: {}", hasRights);
if (!hasRights) {
throw new ForbiddenException();
}
return workreport;
}
但是,当我在WorkreportCrudFacade
实例上调用测试方法WorkreportCrudFacade
时,该方法没有适当的存根(它应该返回true
,但返回false
)。
我相信这将是一些细节,但我无法找出什么是错误的-可能是在争论中,但不确定。
我使用的是Mockito 2.22.0。
发布于 2018-11-06 06:45:49
因为Mockito (Class)和anyInt家族匹配器执行类型检查,因此它们将不匹配空参数。相反,请使用isNull匹配器。
我认为这里会发生以下情况:您的DomainObjectTools
是一个空模拟(不是存根),因此它返回空Workreport
和空Employee
。它会导致调用accessRightsService.hasEmployeeRightsToWorkReport(null,null)
。null
值与ArgumentMatchers.any(Class)
不匹配。
https://stackoverflow.com/questions/53172122
复制相似问题