您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何解決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
報錯信息顯示初始化失敗,初始化失敗的本質是因為找不到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的方法有返回值時,返回的方法類型必須要使用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錯誤處理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。