Debian-7.1下JBoss Forge + Arquillian + JBoss-as-7.1 测试环境搭建
下载安装Forge
JBoss Forge是一种能够快速创建、开发Java项目的工具,通过它我们可以迅速生成项目骨架,解决库依赖问题,并与Arquillian测试框架集成。Forge有点类似于seam-gen,但其最大的不同之处在于,seam-gen只能在项目创建时一次性成生class,而Forge可以随时动态添加class,field, 依赖库等。我们可以从官网(http://forge.jboss.org/)下载forge,但速度真的非常慢,只有40kb/s。于是我把它上传到了百度云:http://pan.baidu.com/s/1bnzj2Cf
forge安装非常简单,解压tar.gz,配置环境变量$FORGE_HOME为forge安装目录,再将$FROGE_HOME/bin添加到$PATH中即可。
创建项目并添加Arquillian支持
不用forge也行,但要手工修改pom.xml添加很多dependency。forge可以为我们代劳。步骤如下:
运行forge:
forge
启动forge大概需要5s,不知道这么久的时间forge在做什么。。启动成功后应该输出如下提示:
创建项目arquillian-demo,并创建包org.arquillian.example:
new-project --named arquillian-demo --topLevelPackage org.arquillian.example
用forge的beans插件安装CDI支持:
beans setup
创建一个Bean:
beans new-bean --type org.arquillian.example.MySimpleBean --scoped DEPENDENT
回到工程根目录:
cd ~~
为forge安装arquillian插件:
forge install-plugin arquillian
注意,不要通过Arquillian官网的Guide给出的链接下载forge,那个是1.0版,而arquillian插件最低要求为1.3。
以上是arquillian官网给出的步骤,但如果再向下就会出错了,可能是文档没有及时更新。不过我们可以在Forge的官网上找到说明 http://forge.jboss.org/docs/important_plugins/arquillian-testing.html#content。
设置测试容器(这里是JBoss-as-7.1.0):
arquillian setup --containerType MANAGED --containerName JBOSS_AS_MANAGED_7.X
Tip: 输入
arquillian setup --containerType MANAGED --containerName [TAB]
能自动列出arquillian支持的所有容器列表。
此时forge会问我们是否要安装JBoss,我们选择不安装。
修改arquillian.xml文件,内容如下:
<container default="true" qualifier="JBOSS_AS_MANAGED_7.X"> <configuration> <property name="jbossHome">JBOSS安装目录</property> </configuration> </container>
生成测试Bean
forge可以根据已有的类自动生成对应的测试类:
arquillian create-test --class org.arquillian.example.MySimpleBean.java
这会生成MySimpleBeanTest.java文件:
package org.arquillian.example; import org.arquillian.example.MySimpleBean; 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.spec.JavaArchive; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; import static org.hamcrest.core.Is.*; @RunWith(Arquillian.class) public class MySimpleBeanTest { @Inject private MySimpleBean mysimplebean; @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class, "test.jar") .addClass(MySimpleBean.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Test public void testIsDeployed() { Assert.assertNotNull(mysimplebean); } }
在JBoss中运行测试
build test --profile arq-jboss_as_managed_7.x
此时forge会启动Jboss,部署由ShrinkWrap生成的jar包,并运行测试。
如果你发现在启动JBoss后过程就停住了,没有任何Result,那么就要检查一下pom.xml,找到最后一个dependency节点,看看version是否为你JBoss对应的版本。
<dependencies> <dependency> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-arquillian-container-managed</artifactId> <version>7.1.0.Final</version> </dependency> </dependencies>
我这里之前居然是7.1.1,导致出现各种奇妙的错误,浪费了不少时间。如果你想先手动启动JBoss,然后让arquillian在远程容器中运行测试的话,那么就要修改arquillian.xml,将allowConnectingToRunningServer设为true:
<container default="true" qualifier="JBOSS_AS_MANAGED_7.X"> <configuration> <property name="jbossHome">/home/whf/app/jboss-as-7.1.1.Final</property> <property name="allowConnectingToRunningServer">true</property> </configuration> </container>
至此测试环境配置完毕,测试成功后的输出结果如下: