本教程讓你熟悉使用 JBoss Forge 的 Arquillian 插件。 閱讀本教程後,你能夠掌握:
你將完成很多與 快速入門教程 描述中相同的步驟, 不同是這裡把一些瑣碎的事留給 Forge 來處理。本教程定於快速閱讀,就是讓你能夠更快的入門。
本教程假定你已經安裝好了 JBoss Forge . 安裝 Forge 並不麻煩,請參考 “快速入門教程” 或者 官方的 Forge 文檔 ,下載和安裝。你的機器上還需要安裝 JDK 1.6 或更高版本。
在使用 Arquillian之前,我們要先創建一個項目。如果你還沒創建,請使用下面的 Forge 命令來創建一個簡單的 Java EE 6 項目,包含 JPA 支持。
$ new-project --named arquillian-demo --topLevelPackage demo
? Use [/Users/paul/arquillian-demo] as project directory? [Y/n]
***SUCCESS*** Created project [arquillian-demo] in new working directory [/Users/paul/arquillian-demo]
Wrote /Users/paul/arquillian-demo
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/java
Wrote /Users/paul/arquillian-demo/src/test/java
Wrote /Users/paul/arquillian-demo/src/main/resources
Wrote /Users/paul/arquillian-demo/src/test/resources
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/forge.xml
新項目已經創建,下一步,我們需要添加一些代碼用於測試。下面使用 Forge 來創建一個 CDI Bean。
首先,我們使用 “beans” 插件來安裝 CDI 到項目中。
$ beans setup
***SUCCESS*** Installed [forge.spec.cdi] successfully. ? Do you want to install CDI APIs? [y/N]
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/beans.xml
然後創新建一個 Bean。
$ beans new-bean --type demo.MySimpleBean --scoped DEPENDENT
Picked up type <JavaResource>: demo.MySimpleBean
Wrote /Users/paul/arquillian-demo/src/main/java/demo/MySimpleBean.java
項目已經准備就緒,下面進行測試。
設置 Arquillian 簡單,你可能已經 快速入門教程 中讀過。在 pom.xml 中配置一個新的 Arquillian 容器需要大量復制和粘貼工作。Forge 可以用一個命令來完成這些工作。
首先你需要安裝 Arquillian 插件。
$ forge install-plugin arquillian
現在我們需要設置好 Arquillian 和容器配置。這裡使用 JBoss AS7。
$ arquillian setup --container JBOSS_AS_7_MANAGED
Forge 會提示你要使用的 JUnit, Arquillian 和 JBoss AS7 版本。選擇使用最新版本。如果你還沒下載 JBoss AS7,Forge 甚至也可以幫你自動完成。
就這樣,Arquillian 配置完畢。你可以自行查看一下 pom.xml 文件中生成的 dependenices 和 profile,Forge 還在 src/test/resources 創建了一個 arquillian.xml 文件。
現在開始寫一個測試。再次使用 Forge 幫你完成。
$ arquillian create-test --class demo.MySimpleBean.java
Picked up type <JavaResource>: demo.MySimpleBeanTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/MySimpleBeanTest.java
一個包含部署和測試方法的新測試類會添加到項目中。它使用 CDI 注入了要測試的類,這樣能夠立即驗證測試是否能夠在容器中運行。如果你的 IDE 不能找到 imports,請確認前面創建的 Maven profile 是否已經啟用。你可以從 IDE,或者 Maven 命令行,或者 Forge 中直接運行測試。
$ build --profile arq-jbossas-7-managed
恭喜你! 你已經使用 Arquillian 和 Forge 得到第一個 (greenbar) 綠條 !
下面嘗試測試 JPA 代碼。
在開始寫使用 Java Persistence API (JPA) 的測試之前,需要先配置 JPA。我們將會創建一個 Entity,然後寫一個簡單的 Data Access Object,這就是我們將要進行測試的類。
$ persistence setup --provider HIBERNATE --container JBOSS_AS7
***SUCCESS*** Installed [forge.spec.jpa] successfully.
***INFO*** Setting transaction-type="JTA"
***INFO*** Using example data source [java:jboss/datasources/ExampleDS]
Warning: The encoding 'UTF-8' is not supported by the Java runtime.
? The JPA provider [HIBERNATE], also supplies extended APIs. Install these as well? [y/N] [false]
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/persistence.xml
現在開始創建 Entity。
$ entity --named Language --package demo.entities
Created @Entity [demo.entities.Language]
Picked up type <JavaResource>: demo.entities.Language
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java
然後向這個 Entity 中添加一些屬性。
$ field string --named name
Added field to demo.entities.Language: @Column private String name;
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java
你必須復制下面這個文件到你的項目中。
src/main/java/demo/dao/LanguageDao.javapackage demo.dao;
import demo.entities.Language; import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List;
@Singleton @Startup public class LanguageDao { @PersistenceContext EntityManager em;
public List<Language> listLanguages() { return em.createQuery("select l from Language l").getResultList(); }
@PostConstruct public void insertTestData() { Language java = new Language(); java.setName("Java"); em.persist(java);
Language ruby = new Language(); ruby.setName("Ruby"); em.persist(ruby);
Language groovy = new Language(); groovy.setName("Groovy"); em.persist(groovy); } }
現在開始創建我們的測試類,如果你已經完成了教程的上半部分,這個命令也類似。
$ arquillian create-test --class demo.dao.LanguageDao.java --enableJPA
Picked up type <JavaResource>: demo.dao.LanguageDemoTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/dao/LanguageDemoTest.java
這個命令會創建一個測試類,並添加 persistence.xml 到測試的部署中。在 IDE 中打開這個測試類,添加 Language
到部署中。
現在添加一個測試斷言:
src/test/java/demo/dao/LanguageDaoTest.java@Test
public void testListLanguages() {
Assert.assertEquals(3, languagedao.listLanguages().size());
}
恭喜你! 另一個 Arquillian (greenbar) 綠條 !
添加其它容器很簡單,只需再次運行 setup 命令。例如,添加 Glassfish。
$ arquillian setup --container GLASSFISH_3_1_REMOTE
在容器之間切換只需要切換 Maven profile。例如在 Forge中:
$ build test --profile glassfish-remote-3
為了調試,將測試導出到一個部署文件非常有用。Forge 可以幫你完成。
首先轉到一個 Arquillian 測試:
$ cd src/test/java/demo/MySimpleBeanTest.java
然後導出部署文件:
$ arquillian export
你可以在項目中 target 目錄中找到這個部署文件。
Arquillian 的詳細介紹:請點這裡
Arquillian 的下載地址:請點這裡