首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟制造者-内联-无法初始化内联拜特巴迪模拟制造者(power+ jdk 8+字节伙伴)

模拟制造者-内联-无法初始化内联拜特巴迪模拟制造者(power+ jdk 8+字节伙伴)
EN

Stack Overflow用户
提问于 2020-02-17 17:48:59
回答 2查看 19.9K关注 0票数 14

我正在使用Powermockito来模拟和监视静态类。版本: 2.0.4

还使用mockito核心版本3.0.0。在我的一个项目中,我能够通过启用下面所指定的模拟制造者内联( mockStatic )来实现https://github.com/powermock/powermock-examples-maven/blob/master/mockito2/src/test/resources/org/powermock/extensions/configuration.properties

但是,当我在另一个项目上尝试相同的方法时,会遇到以下错误:

代码语言:javascript
运行
复制
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.ghx.tpm.api.ISubscribedProductParameterService]: Factory method 'subscribedProductParameterService' threw exception; nested exception is java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
Caused by: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@614aeccc
Caused by: java.lang.IllegalStateException: Failed to load MockMaker implementation: mock-maker-inline
Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker
Caused by: org.mockito.exceptions.base.MockitoInitializationException: 

Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)

Java               : 1.8
JVM vendor name    : Oracle Corporation
JVM vendor version : 25.161-b12
JVM name           : Java HotSpot(TM) 64-Bit Server VM
JVM version        : 1.8.0_161-b12
JVM info           : mixed mode
OS name            : Linux
OS version         : 4.4.0-166-generic

Caused by: java.lang.IllegalStateException: Error during attachment using: net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@3c89bb12
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException 

你能帮我解决这个问题吗?

其他详情:

我是在嘲笑静态间谍类here.

  • byte-buddy jar解析版本是1.9.10

  • 会重叠mockito2和powermock mockito2 2会在加载MockMaker时引起问题吗?如何解决这些问题?

  • ,如果测试是在IDE中执行的,那么它运行得很好。但是在maven控制台中运行时失败。

其他发现:通过添加@PrepareForTest和PowerMockRunner来确保使用PowerMockRunner(因为我的另一个项目使用相同的配置)

在这一行中,完全面对Null指针异常:

代码语言:javascript
运行
复制
ByteBuddyAgent.java (private static void install(AttachmentProvider attachmentProvider, String processId, String argument, AgentProvider agentProvider)
 Attacher.install(attachmentAccessor.getVirtualMachineType(), processId, agentProvider.resolve().getAbsolutePath(), argument);

类加载器失败时是- AppLaunchClassLoader。(而对于工作项目,则是URLClassLoader)。不确定这种差异是否是原因之一。

更新2:

  • @PowerMockRule ->这个Anntoation一旦在
  • 调用期间初始化JVM代理,它就会尝试加载模拟制造者内联,从而将
  • 加载到JVM中。这会否引起任何问题?我相信,VirtualMachine.attach()方法被调用了两次。不确定它是否会引起任何问题。

Eclipse通过tools.jar (在IDE中工作得很好) Maven命令行加载模拟制造者内联(通过powermock javaagent(初始化错误失败))。-有建议强制maven控制台使用tools.jar进行模拟机内联初始化吗?

更新3:我采用了一种极简主义的方法。删除所有Spring运行程序、Bean创建、上下文配置。只是在()+ Sysout上保留了一个普通的PowerMockRunner+静态模拟。

仍然面临模拟制造商-内联初始化错误。感觉很棒!相同的配置工作在同一个工作区中的另一个项目上!

EN

Stack Overflow用户

回答已采纳

发布于 2020-02-21 10:57:39

发现了问题。@PowerMockRule (它使用powermock javaagent.JAR)是罪魁祸首。

使用@PowerMockRule和模拟制造者内联将导致此问题。

我必须将PowerMockRule替换为@RunsWith(PowerMockRunner.class)来修复这个问题。谢谢。

更新1:修复后的,如这里所讨论的,面对类加载程序的问题。请随时分享你的建议。谢谢

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60267950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档