针对新手的Java EE7和Maven项目–第6部分
從前面的部分恢復(fù)
第1 部分 , 第2 部分 , 第3 部分 , 第4 部分 , 第5部分
在上一篇文章(第5部分)中,我們發(fā)現(xiàn)了如何使用Arquillian(我們的EJB服務(wù))進(jìn)行單元測(cè)試,并將其部署在Wildfly8.1應(yīng)用服務(wù)器的“真實(shí)”實(shí)例中。 擴(kuò)展前面的示例,我們將添加更多配置和代碼,以便我們可以添加涉及JPA2實(shí)體的單元測(cè)試。 從數(shù)據(jù)庫創(chuàng)建,保存和檢索信息是任何JavaEE應(yīng)用程序的一項(xiàng)非常基本的任務(wù)。 我們需要確保我們的域模型和在其之上編碼的邏輯經(jīng)過了盡可能多的測(cè)試。 我將使用“ 最簡(jiǎn)單的 ”配置形式和相關(guān)庫。 由于我們已經(jīng)針對(duì)Wildfly 8.1進(jìn)行了測(cè)試,因此我們將使用與服務(wù)器捆綁在一起的內(nèi)部H2內(nèi)存數(shù)據(jù)庫以及相關(guān)的ExampleDS數(shù)據(jù)源 。
請(qǐng)注意 ,這僅是用于測(cè)試和演示,在現(xiàn)實(shí)生活中,您將需要在基于大量生產(chǎn)的RDBMS下進(jìn)行測(cè)試,您應(yīng)該做到以下幾點(diǎn):
- 在您的數(shù)據(jù)庫服務(wù)器(例如Oracle,MySQL,DB2…)中創(chuàng)建測(cè)試數(shù)據(jù)庫模式
- 將適當(dāng)?shù)臄?shù)據(jù)源配置添加到應(yīng)用程序服務(wù)器,以便它連接到上述數(shù)據(jù)庫服務(wù)器。
我們已經(jīng)設(shè)置了Arquillian,并且已經(jīng)在利用獨(dú)立的Wildfly 8.1應(yīng)用服務(wù)器的功能。 在上一篇文章(第5部分)中,我們只是一個(gè)簡(jiǎn)單的Stateless EJB,它沒有在數(shù)據(jù)庫上檢索或保存信息。 在樣本域模塊上,我們已經(jīng)定義了一個(gè)簡(jiǎn)單的JPA2實(shí)體Bean。 我們想測(cè)試一些基本的東西,例如將實(shí)體保存在數(shù)據(jù)庫中,檢索實(shí)體等。即使對(duì)于如今,對(duì)于許多項(xiàng)目來說,創(chuàng)建無狀態(tài)會(huì)話bean也是一種普遍的模式,實(shí)際上為每個(gè)實(shí)體實(shí)現(xiàn)此代碼。 您可能聽說過它們是“ DAO”類。 在我們的案例中,沒有DAO實(shí)施,但是將應(yīng)用相同的原則。
定義一個(gè)test-persistence.xml
由于我們已經(jīng)在sample-domain模塊(jar)下定義了一個(gè)標(biāo)準(zhǔn)的persistence.xml (實(shí)際上是在配置我們的實(shí)體管理器),因此我們需要進(jìn)行類似的配置。 最終,一個(gè)非常相似的持久化xml,但這一次將被放置在/ src / test / resources文件夾中,因?yàn)樗鼘槲覀?#xff08;在測(cè)試過程中從Arquillian / Wildfly測(cè)試組合。
它是這樣的:
<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"><persistence-unit name="test"><jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source><properties><property name="hibernate.hbm2ddl.auto" value="create-drop"/><property name="hibernate.show_sql" value="true"/><property name="hibernate.format_sql" value="true"/><property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/></properties></persistence-unit></persistence>以上文件的一些注意事項(xiàng):
- 我們正在定義在Wildly 8.1上預(yù)先配置的ExampleDatasource
- WildFly 8.1與Hibernate 4.x捆綁在一起,因此我們正在使用Hibernate配置的“安全”屬性。
- 我們正在使用“ 創(chuàng)建-刪除 ”策略,這意味著每次運(yùn)行測(cè)試時(shí),hibernate都會(huì)將表拖放到基礎(chǔ)數(shù)據(jù)庫中并重新創(chuàng)建它們。 這將在我們正在嘗試并且不斷更改領(lǐng)域模型的情況下為我們提供幫助。
- 的胚胎。 Wildly提供的數(shù)據(jù)庫是H2 ,因此我們正在配置Hibernate以使用此“ 方言 ”。
創(chuàng)建Arquillian測(cè)試
這是我們測(cè)試的樣子(您可以在文章末尾的git鏈接上查看源代碼):
以上代碼的一些注意事項(xiàng):
點(diǎn)0 :這是每個(gè)基于Arquillian的測(cè)試中最重要的部分之一。 這是我們?cè)趦?nèi)存中創(chuàng)建“戰(zhàn)爭(zhēng)”的地方,我們的可部署內(nèi)容將包含被測(cè)類和支持框架所需的任何其他資源。 所有的連接都是使用一個(gè)名為ShrinkWrap的基于Arquillian的框架完成的 。 在我們的示例中,“ createDeployment ”方法將打包我們的單個(gè)JPA實(shí)體“ User”和一個(gè)persistence.xml文件,該文件實(shí)際上是我們測(cè)試資源下的test-persistence.xml,并配置了使用默認(rèn)設(shè)置的實(shí)體管理器瘋狂的數(shù)據(jù)源。
要點(diǎn)1:這是一個(gè)特殊的批注,在更復(fù)雜的測(cè)試中非常方便,通過使用此批注,我們實(shí)際上是在默認(rèn)情況下將JTA(事務(wù)性)支持注入到我們的測(cè)試方法中,在這種特殊測(cè)試中,使用量不大。 記下“回滾”設(shè)置。 它表明無論該測(cè)試方法在事務(wù)中最后執(zhí)行什么操作,所有插入/刪除/更新都將被回滾,因此我們不會(huì)留下任何垃圾。
第2點(diǎn):我們需要使用適當(dāng)?shù)腞unWith注釋對(duì)測(cè)試進(jìn)行注釋,這表明我們希望啟用Junit / Arquillian機(jī)制。
第3點(diǎn):我們正在注入一個(gè)實(shí)體管理器,就像在常規(guī)EJB / resource中那樣。 持久性管理器的名稱必須與test-persistence.xml中定義的名稱保持一致,因此請(qǐng)當(dāng)心。
要點(diǎn)4: @Before注釋表示init()方法將在每次測(cè)試之前運(yùn)行。 這是初始化任何數(shù)據(jù)并準(zhǔn)備我們的測(cè)試域環(huán)境的好地方。
第5點(diǎn):您可以在init()方法中看到,我們正在保留一個(gè)User實(shí)體,這與我們?cè)诋a(chǎn)品/實(shí)際代碼中所做的類似!
第6點(diǎn):我們正在嘗試查詢對(duì)象的實(shí)際測(cè)試方法,此后繼續(xù)存在。
最后
實(shí)際上,我們已經(jīng)配置并準(zhǔn)備了項(xiàng)目結(jié)構(gòu)和配置以便使用Arquillian,這一事實(shí)實(shí)際上是最重要的。 一旦準(zhǔn)備好了基本塊,那么就需要編寫更多的測(cè)試并試驗(yàn)代碼。 右鍵單擊測(cè)試,如您所見,我們獲得了成功的綠燈,這??是一個(gè)明確的通過。 測(cè)試愉快!
- 您可以在我的bitbucket存儲(chǔ)庫中的post6標(biāo)記下找到此帖子的完整代碼。
翻譯自: https://www.javacodegeeks.com/2014/06/java-ee7-and-maven-project-for-newbies-part-6.html
總結(jié)
以上是生活随笔為你收集整理的针对新手的Java EE7和Maven项目–第6部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统的服务器怎么登录(linu
- 下一篇: Java 8 Friday:大多数内部D