温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-11 10:56:55 来源:亿速云 阅读:303 作者:iii 栏目:编程语言

这篇文章主要介绍“如何解决Junit测试代码的ea-async错误处理”,在日常操作中,相信很多人在如何解决Junit测试代码的ea-async错误处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决Junit测试代码的ea-async错误处理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

问题背景

项目代码中使用到了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

<build>
        <plugins>
		<plugin>
				<groupId>com.ea.async</groupId>
				<artifactId>ea-async-maven-plugin</artifactId>
				<version>1.2.3</version>
				<executions>
					<execution>
						<goals>
							<goal>instrument</goal>
							<goal>instrument-test</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
	</plugins>
</build>

执行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<Integer> calledMethod() {
        return CompletableFuture.completedFuture(1);
    }

错误的写法

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

正确的写法

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI