本文主要是介绍Arquillian测试框架快速上手教程 (一) - 环境搭建、容器适配、单元测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本系列教程共五篇,分别是:
一、 环境搭建、容器适配、单元测试
二、JBoss Forge、ShrinkWrap快速指南
三、使用 Arquillian 进行Java持久化测试
四、使用Arquillian + Drone + Selenium + Graphene 进行Web自动化测试
五、使用 Arquillian 在云端进行测试
其中,Web容器以JBoss-as-7.1.1为例,工程以maven目录结构为准。
本文所涉及到的内容有:
1. Arquillian
2. Maven
3. JUnit
4. Seam Framework
5. ShrinkWrap
6. JBoss Forge
Arquillian简介
一个最简单的单元测试
创建maven工程
forge
新建项目 arquillian-demo,指定包名为cn.demo:
new-project --named arquillian-demo --topLevelPackage cn.demo
这里就用这2条命令,我们将会手动编辑pom文件来添加arquillian的相关依赖。关于Forge的详细安装、使用方法,参见我另一篇文章: Debian-7.1下JBoss Forge + Arquillian测试环境搭建
添加Arquillian相关依赖
<modelVersion>4.0.0</modelVersion><groupId>cn.demo</groupId><artifactId>arquillian-demo</artifactId><version>1.0.0-SNAPSHOT</version><repositories><repository><id>JBOSS_NEXUS</id><url>http://repository.jboss.org/nexus/content/groups/public</url></repository></repositories><build><finalName>arquillian-demo</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.6</source><target>1.6</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
我们需要添加 dependency 和 dependencyManagement节点,修改完成后内容如下:
<modelVersion>4.0.0</modelVersion><groupId>cn.demo</groupId><artifactId>arquillian-demo</artifactId><version>1.0.0-SNAPSHOT</version><repositories><repository><id>JBOSS_NEXUS</id><url>http://repository.jboss.org/nexus/content/groups/public</url></repository></repositories><build><finalName>arquillian-demo</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.6</source><target>1.6</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build><!-- newly add starts --><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.1</version><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.junit</groupId><artifactId>arquillian-junit-container</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.jboss.arquillian</groupId><artifactId>arquillian-bom</artifactId><version>1.1.3.Final</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><!-- newly add ends -->
保存后,eclipse会自动从远程仓库中下载相关jar包,稍等即可。
编写Bean和测试类
package cn.demo;public class Hello {public String sayHello(String name) {return "hello," + name;}
}
该类的功能非常简单,传入一个名字,然后输出 hello + 名字。下面我们为这个类写单元测试。
package cn.demo;import javax.inject.Inject;import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;@RunWith(Arquillian.class)
public class HelloTest {@Injectprivate Hello helloBean; // 注入一个Hello对象@Deploymentpublic static JavaArchive createDeployment() {return ShrinkWrap.create(JavaArchive.class).addClass(Hello.class).addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");}@Testpublic void isHelloValid() {Assert.assertNotNull(helloBean); // 判断注入是否成功Assert.assertEquals("hello,Neo", helloBean.sayHello("Neo")); // 判断返回值是否正确}
}
代码说明:
添加容器适配器(Container Adapter)
<profiles><profile><id>arq-jbossas-remote</id><dependencies><dependency><groupId>org.jboss.spec</groupId><artifactId>jboss-javaee-6.0</artifactId><version>1.0.0.Final</version><type>pom</type><scope>provided</scope></dependency><dependency><groupId>org.jboss.as</groupId><artifactId>jboss-as-arquillian-container-remote</artifactId><version>7.1.1.Final</version><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.protocol</groupId><artifactId>arquillian-protocol-servlet</artifactId><scope>test</scope></dependency></dependencies></profile></profiles>
这里用profile的一大好处是,我们可以灵活的切换不同的Web服务器。比如,我们想在JBoss上跑测试,就执行
mvn test -Parq-jbossas-remote
如果我们想在GlassFish上运行测试,就可以定义一个名为 arq-glassfish-remote的profile,然后执行:
mvn test -Parq-glassfish-remote
运行测试
mvn clean install -Dmaven.test.skip=true
mvn test -Parq-jbossas-remote
输出结果如下,则测试成功。(别忘了要事先启动JBoss!)
以managed方式运行测试
<profile><id>arquillian-jbossas-managed</id><dependencies><dependency><groupId>org.jboss.spec</groupId><artifactId>jboss-javaee-6.0</artifactId><version>1.0.0.Final</version><type>pom</type><scope>provided</scope></dependency><dependency><groupId>org.jboss.as</groupId><artifactId>jboss-as-arquillian-container-managed</artifactId> <!-- 注意这里换成了managed而不是remote --><version>7.1.1.Final</version><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.protocol</groupId><artifactId>arquillian-protocol-servlet</artifactId><scope>test</scope></dependency></dependencies></profile>
然后,为了让Arquillian “知道” 我们的JBoss放在哪, 我们需要在 main/src/resource 目录下创建一个名为 arquillian.xml的文件,通过这个文件我们可以设置 arquillian 的很多属性,类似于 web.xml 的功能。
<arquillian xmlns="http://jboss.org/schema/arquillian"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://jboss.org/schema/arquillianhttp://jboss.org/schema/arquillian/arquillian_1_0.xsd"><container qualifier="jbossas-managed" default="true"><configuration><property name="jbossHome">你的JBoss安装目录</property></configuration></container>
</arquillian>
mvn test -Parquillian-jbossas-managed
从控制台输出可以看到,到 test 阶段时,Arquillian 会启动JBoss :
在我们的ftc的seam项目中如何使用Arquillian?
mvn test -P你起的profile名
即可进行测试。但seam-2.3中默认使用TestNG而不是JUnit,所以还需要对pom文件进行修改。直接把ftc聚合模块的pom.xml改成下面的内容即可:
4.0.0cnftc1.0-SNAPSHOTpomrailway safety monitorrailway safety monitorhttp://dz.sdut.edu.cn/redmineftc-ejbftc-webftc-earftc-testsJBoss repositoryhttp://repository.jboss.org/nexus/content/groups/public/phantomjsftcslow12.01.6.17.1.1.Final0.5.8.2012071112201.6.2*firefoxproxyhttp://localhost:8080http://localhost:818014444localhost030000false${project.build.directory}/ftest-logs${project.build.directory}/ftest-output300truesrc/test/resources-ftestlocalhost/${project.build.finalName}/${env.JBOSS_HOME}/server/all${env.JBOSS_HOME}default${env.CATALINA_HOME}falseUTF-81.61.6${maven.compiler.target}${maven.compiler.source}postgresqlpostgresql9.1-901-1.jdbc44.111.1.2.Finalorg.jboss.arquillian arquillian-bom 1.1.2.Final pom import org.jboss.arquillian.extension arquillian-drone-bom 1.2.3.Final pom import org.jboss.arquillian.selenium selenium-bom 2.39.0 pom import cn.ftc ftc-ejb ${project.version} ejb cn.ftc ftc-web ${project.version} war cn.ftc ftc-ear ${project.version} org.jboss.seam bom 2.3.0.Final pom import commons-logging commons-logging 1.1.1 provided commons-collections commons-collections 3.2 provided com.google.guava guava ${guava.version} org.slf4j slf4j-log4j12 ${slf4j.version} ${jdbc.groupId} ${jdbc.artifactId} ${jdbc.version} test javax.enterprisecdi-apiprovidedorg.jboss.spec.javax.annotationjboss-annotations-api_1.1_specprovidedjunitjunittestorg.jboss.arquillian.junitarquillian-junit-containertestorg.jboss.arquillian.graphenegraphene-webdriver2.0.1.Finalpomtestarquillian-demomaven-compiler-plugin 3.1
4.0.0ftccn1.0-SNAPSHOTcn.ftcftc-testsftc Integration Tests Module (EE6)cn.ftcftc-ejbejbtestorg.slf4jslf4j-log4j12testorg.hibernate.javax.persistencehibernate-jpa-2.0-apiorg.jboss.spec.javax.facesjboss-jsf-api_2.1_specsrc/test/resources
这篇关于Arquillian测试框架快速上手教程 (一) - 环境搭建、容器适配、单元测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!