Java供应商与org.powermock.reflect.exceptions.MethodNotFoundException的接口

时间:2017-01-04 07:52:38

标签: powermock powermockito

我在Powermockito之前模拟了一个https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/client/transport/TransportClient.java,然后才开始工作,但是自从代码变通并添加下面的代码:

NetworkModule networkModule = new NetworkModule(settings, true, pluginsService.filterPlugins(NetworkPlugin.class), threadPool,
                bigArrays, circuitBreakerService, namedWriteableRegistry, xContentRegistry, networkService);
            final Transport transport = networkModule.getTransportSupplier().get();

代码总是在getTransportSupplier()失败.get(),抛出异常:

Caused by: org.powermock.reflect.exceptions.MethodNotFoundException: No methods matching the name(s) get were found in the class hierarchy of class java.lang.Object.
    at org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1720)
    at org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1745)
    at org.powermock.reflect.internal.WhiteboxImpl.getBestMethodCandidate(WhiteboxImpl.java:983)
    at org.powermock.core.MockGateway$MockInvocation.findMethodToInvoke(MockGateway.java:317)
    at org.powermock.core.MockGateway$MockInvocation.init(MockGateway.java:356)
    at org.powermock.core.MockGateway$MockInvocation.<init>(MockGateway.java:307)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:142)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:125)
    at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:162)

networkModule.getTransportSupplier()返回供应商。

这是来自networkModule的代码:https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java 知道为什么吗?

1 个答案:

答案 0 :(得分:0)

我认为这是Powermock的一个错误。

在问题数据库中查看entry;它显示相同的堆栈跟踪(尽管对于某些不同的目标)。但足够接近。

所以,很有可能,这将在某个时候得到修复。或者不是。

长篇故事,短暂的咆哮:我看到PowerMock出现了太多此类问题;因此,我决定在某些时候,我宁愿修复我破碎的设计;而不是使用PowerMock锤子。根据我的经验,当我们谈论“我们自己的代码”时;然后我们只创建easy-to-test代码;然后我们不再需要PowerMock了。说真的,这很有效。当您创建自己的类时,需要PowerMock来测试它;然后你做错了什么!一旦你停止使用PowerMock;你不要把时间花在那些没有与你的产品有关的问题上。

无论如何,你的选择空间是:

  • 订阅该缺陷;并试图引起一些关注;越多人去那里“给我”,就越有可能发生。
  • 查看您的设计,仔细了解为什么需要PowerMock(ito)。然后通过更改生产代码来决定是否可以从中消除此要求。