首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mockito模拟没有正确匹配参数(?)

Mockito模拟没有正确匹配参数(?)
EN

Stack Overflow用户
提问于 2018-11-06 12:40:12
回答 1查看 5K关注 0票数 0

为了测试另一个对象,我试图在服务层中对一种方法进行存根:

代码语言:javascript
运行
复制
@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);

  }

}

以及调用测试方法的方法:

代码语言:javascript
运行
复制
  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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 14:45:49

引用ArgumentMatchers javadoc

因为Mockito (Class)和anyInt家族匹配器执行类型检查,因此它们将不匹配空参数。相反,请使用isNull匹配器。

我认为这里会发生以下情况:您的DomainObjectTools是一个空模拟(不是存根),因此它返回空Workreport和空Employee。它会导致调用accessRightsService.hasEmployeeRightsToWorkReport(null,null)null值与ArgumentMatchers.any(Class)不匹配。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53172122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档