【问题标题】:How to resolve InvalidUseOfMatchers exception in Java - Mockito如何解决 Java 中的 InvalidUseOfMatchers 异常 - Mockito
【发布时间】:2018-11-07 08:19:00
【问题描述】:

我一直在为类 ProcessorImpl 进行单元测试。在这个类中,我从另一个类 MetadataUtils 创建了一个静态 void 调用。在 MetadataUtils 类中我有:

public class MetadataUtils {    
    private static Metadata metadata  = new Metadata();
    private static ObjectMapper mapper = new ObjectMapper();
    public static void setMetadataFromHeader(String header) throws JsonParseException, JsonMappingException, IOException {
        metadata = mapper.readValue(header, Metadata.class);        
    }
...
}

在我调用的 ProcessorImpl 类中

MetadataUtils.setMetadataFromHeader(getHeader(CsbConstants.METADATA).toString());

在 ProcessorImplTest(单元测试)类中我写了:

PowerMockito.when(processor, method(ProcessorImpl.class, "getHeader"))
        .withArguments(CsbConstants.METADATA)
        .thenReturn(Mockito.any(String.class));
MetadataUtils metadataUtils = Mockito.mock(MetadataUtils.class);
Mockito.doNothing().when(metadataUtils).setMetadataFromHeader(Mockito.any(String.class));

但我得到了异常 InvalidUseOfMachers。你能帮忙解决吗?

【问题讨论】:

  • 异常到底发生在哪一行?
  • in line MetadataUtils metadataUtils = Mockito.mock(MetadataUtils.class);
  • 当你告诉一个模拟返回一些东西时,你需要告诉它返回什么。告诉它返回它想要的任何东西没有多大意义。当您询问异常时,alays 会发布异常的准确和完整的堆栈跟踪。
  • 我刚刚改变了我的 doNothing: Mockito.doReturn("Test").when(metadataUtils).setMetadataFromHeader(Mockito.any(String.class));但我得到了同样的错误。我做错了吗?
  • 嗯,一次一个问题,对吧?我们的目标不是移动目标。

标签: java unit-testing mockito powermockito


【解决方案1】:

Mockito.when(mock.doSomething()).thenReturn(...) 应该用一个实际值存根,它不能返回 Mockito.any(...)

【讨论】:

  • 感谢您的关注和帮助。我刚刚改变了:
  • PowerMockito.when(处理器, 方法(ProcessorImpl.class, "getHeader")) .withArguments(CsbConstants.METADATA) .thenReturn("Test");但现在我得到了 NullPointerException
  • 我个人不太喜欢PowerMockito,我只是用Whitebox来设置内部值。如果您需要使用静态方法,只需将它们包装在一个对象中,模拟这个对象并使用所需的值存根它。
  • 我同意@michaeak。如果不需要,请不要使用 powermock。 PowerMock 应该是最后的手段。有时,小的代码更改可以使类在不使用 powermock 的情况下可测试。
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 2016-10-20
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
相关资源
最近更新 更多