如何用Java和JMockit模拟Map接口的containsKey方法?
如何定位Map调用containsKey时的具体实现类?
我正在模拟java.util.Map接口的containsKey方法,相关定义如下:
// 创建实例 Map<String, ProviderServiceKey> providerService
调用方式:
providerService.containsKey(object.method)
我编写的Mock代码能被识别,但返回逻辑未完全生效:
new MockUp<java.util.Map<String, ProviderServiceKey>>(){ @Mock public boolean containsKey(Object key){ return true; // 这段逻辑未被触发 } }
在Eclipse中查看containsKey方法的类型层级时,显示了大量实现该接口及方法的类,数量过多无法直接定位。请问有没有办法缩小范围,找到当前代码调用containsKey对应的具体实现类?
解决方法:
运行时打印实际类型:在调用
containsKey的代码前添加一行打印语句,直接输出实例的具体类名:System.out.println(providerService.getClass().getName());运行程序后就能拿到实现类的全限定名,比如
java.util.HashMap、java.util.TreeMap等。用Eclipse调试功能查看:
- 在
providerService.containsKey(object.method)代码行打上断点 - 启动调试模式,程序停在断点后,打开Variables视图找到
providerService变量 - 查看变量的类型信息,即可看到它的实际实现类
- 在
追踪实例创建代码:找到
providerService被初始化的位置,比如是new HashMap<>()还是其他实现类的实例化语句,直接就能确定具体类型。
内容的提问来源于stack exchange,提问作者Alejandro Cabrera
相关产品推荐
相关产品推荐

