gpt4 book ai didi

android - 参数匹配器的使用无效!预期 2 个匹配器,记录 1 个 :

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:33 25 4
gpt4 key购买 nike

我需要验证对 handler.sendMessage(msg) 的调用。

代码:

//This bundleImportStorage will send message to UI handler by passing message object
bundleImporter.bundleImportFromStorage(intent);

//In this line I am getting error
when(uiHandler.sendMessage(any(Message.class))).thenReturn(true);

异常详情:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at com.fio.installmanager.nonui.com.bundleimport.TestBundleImport.testIntentExtras(TestBundleImport.java:69)

This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));

最佳答案

基于消息“预期有 2 个匹配器,记录有 1 个”,如果 UiHandler.sendMessage(Message) 是一个 final方法,它委托(delegate)给一个非最终的双参数方法(通常同名的重载)。这是一个问题,因为 Mockito 坚持每个参数只有一个匹配器,如果使用任何匹配器的话。因为 final 方法由 static dispatch 调用,并且因为 Mockito 通过动态覆盖模拟类来工作,所以 Mockito 的第一个交互是使用一个双参数方法,它假设您使用单个匹配器 stub (解释否则令人困惑的错误消息)。

如果可行,确保 UiHandler 和 sendMessage 都是公共(public)的和非最终的。如果没有,您可能需要求助于 RobolectricPowerMock在字节码级别覆盖 final 方法。

我已经写了更多关于 Mockito 内部结构的文章,包括每个参数需要一个匹配器,在 SO 上:How do Mockito matchers work?

关于android - 参数匹配器的使用无效!预期 2 个匹配器,记录 1 个 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com