如何在 Mockito 中模拟方法参数

How to mock method parameter in Mockito

我有一个方法要测试。该方法会抛出异常。

mapper.mapToDTO(fragment.getDTO(), new ElementHandler());

我想测试异常之后发生的情况。所以我做了一个模拟测试:

when(mapper.mapToDTO(dto, Mockito.any(ElementHandler.class))).thenThrow(
            new MappingFailureException());

可惜这个Mocking不好。我也知道 Mockito.any 部分不好。我的目标是调用 MappingFailureException

我如何映射一个 class 类型的对象,如果任何 ElementHandler class 类型作为参数给出,我的异常将被抛出?

试试这个

when(mapper.mapToDTO(Mockito.eq(dto), Mockito.any(ElementHandler.class))).thenThrow(
        new MappingFailureException());

考虑到映射器被模拟了...

Mapper mapper = mock(Mapper.class);

你可以这样试试(应该和你的测试一样)

doThrow(new MappingFailureException()).when(mapper).mapToDTO(dto, Mockito.any(ElementHandler.class));

如果不是,您可以使用 mockito 构建您的自定义答案(在示例中,它 return 是一个字符串,但将其更改为 mapToDTO 的 return 值)

when(mapper.mapToDTO(dto, Mockito.any(ElementHandler.class))).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
      throw new MappingFailureException();
    }
  });

希望对您有所帮助!