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

升级到 1.43 版本后无法运行 JMockit 测试

升级到 1.43 版本后无法运行 JMockit 测试

一只萌萌小番薯 2021-12-10 10:05:27
我有自己的项目,过去可以与 Java 8 完美配合。我使用的非常基本的测试框架是 TestNG 和 JMockit。最近我将 Java 版本升级到 Java 9,我注意到 JMockit 测试因 Java 模块访问问题而失败。谷歌把我带到这个堆栈溢出接受的解决方案模块 java.base 不读取模块 java.desktop建议将 JMockit 升级到 1.34 或更高版本。之后我将其升级到目前的最新版本 1.43。进行此升级后,我无法再运行测试,而我得到的只是控制台输出中的 NullPointerException。我重现该问题的测试如下:package com.my.org;import mockit.FullVerifications;import mockit.Injectable;import mockit.Tested;import org.testng.annotations.BeforeMethod;import org.testng.annotations.Test;public class JMockitIssueTest {    private class Delegate {       public void doSomething() {            System.out.println("Doing something");        }    }    private class ClassUnderTest {        private final Delegate delegate;        private ClassUnderTest(Delegate delegate) {            this.delegate = delegate;        }        public void useDelegate() {            delegate.doSomething();        }    }    @BeforeMethod    public void setUp() throws Exception {    }    @Injectable    private Delegate delegate;    @Tested    private ClassUnderTest classUnderTest;    @Test    public void itShouldUseDelegate() {        classUnderTest.useDelegate();        new FullVerifications() {{            delegate.doSomething();        }};    }}最初 setUp 方法不存在,但在添加一个空方法后,我在控制台输出中获得了更多信息,我在下面列出了这些信息:我尝试了多种排方式,例如使用@Mocked Delegate实例并创建ClassUnderTest自己,甚至回滚到 Java 8。没有运气。我什至尝试将测试移至 jUnit(这不是真正想要的选项,因为有 1400 多个测试类)。目前我的想法已经用完了,但另一方面,上述用例是如此基础,以至于我真的希望我在做一件愚蠢的事情,因为我使用了 1.27 版本的这个嘲讽,不知道 JMockit 世界发生了什么变化框架。
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

也许@Rogério 的意思是查看发行说明,其中从 1.42 版开始需要使用 -javaagent JVM 参数。

试试看,它也在运行测试部分提到


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 470 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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