tms tck_在雅加达EE TCK中使用Arquillian的可能方法
tms tck
最近,我們討論了如何創建獨立的Jakarta Batch測試套件(TCK)。 對于大多數提交者而言,使用Arquillian將測試從實現中如何執行抽象化是很自然的。 但是Romain提出了一個有趣的想法,即使用純JUnit5引起了我的思考。 它并沒有止于思考。 經過數小時的黑客攻擊后,我現在可以提出概念證明,并提出如何將普通的JUnit5用于TCK的建議,以及如何使用良好的舊Arquillian將容器與之集成,以避免重新發明輪子。
當前的獨立Batch TCK的問題在于它基于TestNG,并且僅支持在與測試套件相同的類路徑上運行的Batch實現。 因此,它不支持在Java容器(如應用程序服務器)中運行測試。 現在,只有Jakarta測試套件(CTS)支持此類容器,該套件包含一個批處理TCK測試的副本,該測試使用專有技術在容器中運行測試。
還有其他帶有獨立TCK或計劃創建它的Jakarta EE規范:
- CDI TCK –與Arquillian一起使用TestNG
- Bean驗證 –與Arquillian一起使用TestNG
- JSON-B –正在進行中,與Arquillian一起使用JUnit 4
- DI TCK – JUnit 4
顯然Arquillian在其中很受歡迎。 只有DI TCK不使用它。 但是DI TCK本身也不支持在遠程容器中執行,它僅支持設置本地容器,例如,如果實現支持,則使用CDI SE API。
我的概念證明有3個目標:
如果可以的話,我更喜歡循序漸進而不是爆炸式發展。 而且我意識到,即使我找到了使用JUnit 5的解決方案,無論如何我都可能需要Arquillian與Payara Server集成以實現我的第三個目標。因此,我首先在當前的Batch TCK中添加了對Arquillian的支持,后來希望重用它。將Payara Server與JUnit 5集成在一起。事實證明,這是一種很好的方法,并且不會浪費任何代碼。
添加對Arqullian的支持
在批處理TCK中添加對Arquillian的支持非常簡單,因為測試已使用TestNG,而Arquillian開箱即用地支持TestNG。 唯一棘手的部分是為Arquillian所需的每個測試創建一個部署程序包。 最后,這非常容易,不需要修改測試源。 Arquillian允許創建擴展以為每個測試定義部署程序包,因此我能夠將部署程序包的創建移到單獨的擴展程序中。 需要在容器中運行測試的實現可以使用此擴展,但TCK本身不需要此擴展。
TCK中唯一需要的更改是更改每個測試以擴展Arquillian TestNG基類,僅此而已。
在測試套件的頂部,批處理TCK包含一個示例TCK運行器項目,該項目針對JBatch實現運行TCK。 這也需要稍作更改。 我添加了Arquillian Weld SE連接器,該連接器在Weld CDI容器中運行Arquillian TestNG測試。 這意味著測試將在與測試套件相同的類路徑上執行,并且不需要Arquillian部署。
您可以在這里在我的叉子上看到最終結果: https : //github.com/OndroMih/batch-tck/pull/1 。 總之,我向每個TCK測試添加了一行代碼,并修改了批處理TCK和JBatch的TCK運行器的pom.xml。
這使我可以創建一個示例項目 ,以使用遠程服務器(如Payara Server)運行TCK。 這個示例項目包含我上面提到的Arquillian擴展。 此擴展使用Maven解析器庫來解析項目的pom.xml文件中的JAR依賴項,并將其打包到Arquillian的WAR部署中。 它并不復雜,只需要幾行代碼: MavenTestDependenciesDeploymentPackager.java
將TCK轉換為JUnit5
將基于TestNG的TCK轉換為JUnit 5非常簡單。 除了用JUnit 5等效項替換所有TestNG注釋外,我還需要用標準Java JUL日志記錄替換TestNG報告。
您可以在這里查看我的轉換的最終結果: https : //github.com/OndroMih/batch-tck/pull/2 。 更改了TCK,并且JBatch調諧器項目也使用了它,并且運行無測試失敗。 這解決了我的前2個目標。
最難的事情是將JUnit 5測試套件與Payara Server連接起來以滿足我的第3個目標。 為此,我需要解決以下問題:
- 創建一個部署程序包以將測試部署到Payara Server
- 創建一個JUnit 5擴展以在Payara Server中運行測試并向后報告結果
在上一步中,我已經使用Arquillian擴展解決了第一個問題。 似乎有一個非正式的JUnit 5擴展可以運行Arquillian測試。 是的,它確實有效,我能夠將所有這些合并為最終實現我所有3個目標的解決方案。
使用Arquillian運行JUnit 5 TCK
幸運的是,Arquillian社區一直在為JUnit 5提供支持 。 盡管在等待僅在JUnit 5.5中添加的基本擴展點時花了一些時間,但是現在有一個非正式的arquillian-junit5擴展 , 此分叉中有一些修復程序。
因此,我嘗試將所有已經擁有的東西匯總起來,以嘗試是否可以對Payara Server運行轉換后的JUnit 5 Batch TCK:
- 使用JUnit 5 Batch TCK作為依賴項
- 添加arquillian-junit5擴展名(從本地本地構建)
- 添加我之前創建的Arquillian部署擴展
- 將Arquillian配置為與Payara連接器一起運行,就像我之前所做的那樣
因此,我做到了,啟動了Payara Server,配置了必要的JDBC資源,并執行了以下操作:
Java
mvn verify……并祈禱。
幾分鐘后:
Java
Results: Tests run: 164 , Failures: 0 , Errors: 0 , Skipped: 3一切正常! 這包括所有TCK測試,包括要求具有Jakarta EE功能的測試,并且這些測試無法針對獨立的Batch實現(如JBatch)運行。 TCK目前正在跳過這3個被跳過的測試,而不是我的配置正在跳過這些測試。
摘要
我能夠演示有多種方法可以改進現有的獨立Jakarta EE TCK或以現代方式從完整的Jakarta CTS套件中創建新的。
其中之一是將Arquillian添加到JUnit 4或TestNG測試套件中的一種行之有效的方法,并且期望所有實現都提供Arquillian容器來運行它們的測試。 如所示,只需幾行代碼,這很容易,編寫一個簡單的Arquillian擴展來定義所有測試的部署。
但是,還有一種有趣的新方法可以使用JUnit 5,它是Java最先進的測試框架之一。 JUnit 5提供了足夠的擴展點,并且還允許為所有測試全局啟用擴展。 這意味著測試不需要包括啟用擴展所需的任何模板代碼。 正式發布后,實現者可以使用Arquillian通過現有的JUnit 5 Arquillian擴展來運行測試,也可以創建自己的JUnit 5擴展以將測試與其實現連接。 或者他們可以自由使用現有的非官方JUnit 5 Arquillian擴展,甚至可以根據需要進行修改,因為他們可以真正使用他們想要的任何東西。
翻譯自: https://www.javacodegeeks.com/2020/04/possible-ways-to-use-arquillian-in-jakarta-ee-tcks.html
tms tck
總結
以上是生活随笔為你收集整理的tms tck_在雅加达EE TCK中使用Arquillian的可能方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 取消截屏设置(如何取消截屏限制)
- 下一篇: 电脑锦鲤屏保(好看的锦鲤屏保图片)
