如何解决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

如何解决Junit测试代码的ea-async错误处理

问题原因

报错信息显示初始化失败,初始化失败的本质是因为找不到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 CompletableFuture calledMethod() {
        return CompletableFuture.completedFuture(1);
    }

错误的写法

    public boolean errorCallAwait() {
        int num = await(calledMethod());
        return num == 1;
    }

正确的写法

    public CompletableFuture rightCallAwait() {
        int num = await(calledMethod());
        return CompletableFuture.completedFuture(num == 1);
    }

到此,关于“如何解决Junit测试代码的ea-async错误处理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


标题名称:如何解决Junit测试代码的ea-async错误处理
标题路径:http://cdiso.cn/article/gdissd.html

其他资讯