如何解决Junit测试代码的ea-async错误处理
这篇文章主要介绍“如何解决Junit测试代码的ea-async错误处理”,在日常操作中,相信很多人在如何解决Junit测试代码的ea-async错误处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决Junit测试代码的ea-async错误处理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
伊金霍洛网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联建站从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
问题背景
项目代码中使用到了ea-async的语法糖await,在写Junit测试代码时,发生错误。
错误信息
Error during attachment using: com.ea.async.shaded.net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@6e4f263e
问题原因
报错信息显示初始化失败,初始化失败的本质是因为找不到ea-async的包。但是ea-async明明是存在的,为什么会找不到呢? 这是因为ea-async语法糖本质做的事情是编译织入,在生成字节码阶段,织入代码实现对CompletableFuture对象的处理。这里使用到的技术应该是抽象语法树,有兴趣的同学可以继续探究一下。回到本问题,怎么触发ea-async的代码织入呢?很简单,在模块打包阶段加入ea-async-maven-plugin
插件,然后执行maven打包。
解决方案
在使用await模块的pom中引入ea-async-maven-plugin
com.ea.async ea-async-maven-plugin 1.2.3 instrument instrument-test
执行maven打包
mvn clean package -Dmaven.test.skip=true
个人喜好用mvn clean install -Dmaven.test.skip=true
(install 覆盖了package阶段)
其他规避方案
Main函数方式如果觉得每次mvn打包太麻烦,并且测试代码不打算提交,仅是测试功能,也可以直接写个Main函数调用。 修改JVM方式太麻烦,未研究
await使用的注意事项
在使用await的方法有返回值时,返回的方法类型必须要使用CompletionStage或子类(如:CompletableFuture)包裹起来。如下示例演示正确月错误的方法:
被调用的代码
public CompletableFuturecalledMethod() { return CompletableFuture.completedFuture(1); }
错误的写法
public boolean errorCallAwait() { int num = await(calledMethod()); return num == 1; }
正确的写法
public CompletableFuturerightCallAwait() { int num = await(calledMethod()); return CompletableFuture.completedFuture(num == 1); }
到此,关于“如何解决Junit测试代码的ea-async错误处理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
标题名称:如何解决Junit测试代码的ea-async错误处理
标题路径:http://cdiso.cn/article/gdissd.html