Java 如何在Mockito中模拟方法参数

Java 如何在Mockito中模拟方法参数,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我有一个我想测试的方法。此方法可能引发异常 mapper.mapToDTO(fragment.getDTO(), new ElementHandler()); 我想测试一下,异常发生后会发生什么。所以我做了一个模拟测试: when(mapper.mapToDTO(dto, Mockito.any(ElementHandler.class))).thenThrow( new MappingFailureException()); 不幸的是,这种嘲弄是不好的。我也知道Mo

我有一个我想测试的方法。此方法可能引发异常

mapper.mapToDTO(fragment.getDTO(), new ElementHandler());
我想测试一下,异常发生后会发生什么。所以我做了一个模拟测试:

when(mapper.mapToDTO(dto, Mockito.any(ElementHandler.class))).thenThrow(
            new MappingFailureException());
不幸的是,这种嘲弄是不好的。我也知道Mockito,任何部分都不好。我的目标是调用
MappingFailureException

如果任何类型的
ElementHandler
类作为参数给定,我将抛出异常,那么如何映射一个类类型的对象呢

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

考虑到mapper被嘲笑

Mapper mapper = mock(Mapper.class);
你可以这样做来尝试(应该和你的测试一样)

如果没有,您可以使用mockito构建自定义答案(在本例中,它返回一个字符串,但将其更改为maptodo的返回值)

when(mapper.maptodo(dto,Mockito.any(ElementHandler.class)).thenAnswer(new-Answer(){
@凌驾
公共字符串应答(invocationMock调用)抛出Throwable{
抛出新的MappingFailureException();
}
});
希望有帮助

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