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