为了账号安全,请及时绑定邮箱和手机立即绑定

与 JUNIT5 一起使用时在 JMockit 库中获取异常

与 JUNIT5 一起使用时在 JMockit 库中获取异常

白衣非少年 2023-03-17 14:01:08
我正在尝试将我所有的 JUNIT4 测试用例转换为使用 Jmockit 的 JUNIT5 测试用例。当我设法转换其中之一并执行时,我在 JMockit 库中收到此错误,这是我的应用程序的依赖项,java.lang.NullPointerException    at mockit.internal.startup.Startup.retransformClass(Startup.java:98)    at mockit.internal.state.CachedClassfiles.getClassfile(CachedClassfiles.java:123)    at mockit.internal.ClassFile.createReaderOrGetFromCache(ClassFile.java:92)    at mockit.internal.classGeneration.ImplementationClass.generateClass(ImplementationClass.java:35)    at mockit.internal.expectations.mocking.BaseTypeRedefinition.generateNewMockImplementationClassForInterface(BaseTypeRedefinition.java:163)    at mockit.internal.expectations.mocking.BaseTypeRedefinition.createMockInterfaceImplementationDirectly(BaseTypeRedefinition.java:124)    at mockit.internal.expectations.mocking.BaseTypeRedefinition.createMockedInterfaceImplementationAndInstanceFactory(BaseTypeRedefinition.java:84)    at mockit.internal.expectations.mocking.BaseTypeRedefinition.redefineType(BaseTypeRedefinition.java:61)    at mockit.internal.expectations.mocking.TypeRedefinition.redefineType(TypeRedefinition.java:28)    at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldType(FieldTypeRedefinitions.java:78)    at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldType(FieldTypeRedefinitions.java:65)    at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldTypes(FieldTypeRedefinitions.java:53)请在此处找到可用于调试的示例代码,https://github.com/siva54/jmockit-junit5-stackoverflow/blob/master/test/java8testing/JUnit5Test.java
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

发现了问题。该问题与使用的 Jmockit 版本有关。在我将 JMockit 版本恢复到 1.42 后问题得到解决,


<dependency>

  <groupId>org.jmockit</groupId>

  <artifactId>jmockit</artifactId>

  <version>1.42</version>

  <scope>test</scope>

</dependency>

这个问题与构建可用于将类改造为模拟对象的工具密切相关。要运行 JMockit,需要将 Jmockit JAR 作为 java 代理传递。在 1.43 之前,如果没有通过 java 代理,JMockit 库会搜索项目的依赖项并将其自动添加到 VM 对象中。在 1.42 之后,JMockit 开发人员认为这种查找 JAR 的方式不是一个好的标准,因此被完全删除。从而需要手动传递java代理。


以下是与该问题相关的一些参考链接,

https://github.com/jmockit/jmockit1/issues/540#issuecomment-444316617

https://github.com/jmockit/jmockit1/issues/546

https://github.com/jmockit/jmockit1/issues/568

解决此类问题的方法是

  • 移至版本 1.42

  • 遵循 JMockit 开发人员的这个示例并执行相同的操作。

https://github.com/jmockit/jmockit1/blob/master/samples/petclinic/pom.xml


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号