我在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 知道为什么吗?
答案 0 :(得分:0)
我认为这是Powermock的一个错误。
在问题数据库中查看entry;它显示相同的堆栈跟踪(尽管对于某些不同的目标)。但足够接近。
所以,很有可能,这将在某个时候得到修复。或者不是。
长篇故事,短暂的咆哮:我看到PowerMock出现了太多此类问题;因此,我决定在某些时候,我宁愿修复我破碎的设计;而不是使用PowerMock锤子。根据我的经验,当我们谈论“我们自己的代码”时;然后我们只创建easy-to-test代码;然后我们不再需要PowerMock了。说真的,这很有效。当您创建自己的类时,需要PowerMock来测试它;然后你做错了什么!一旦你停止使用PowerMock;你不要把时间花在那些没有与你的产品有关的问题上。
无论如何,你的选择空间是: