「小山博史のJavaを楽しむ(17):JBoss Forgeでアジャイルな対話式開発をやってみた (1/4) – @IT」について、JBoss AS 7.1.1 + JBoss Forge 1.1.2 を使っていますが、今は JBoss AS 7.1.3 + Forge 1.2.0 が最新です。基本的には記事で紹介していることと同じことができますが、最新版だとそのままでは Arquillienが動作しません。なお、JBoss 7.1.3のバイナリ入手方法については「JBoss AS 7.1.3 のバイナリ jboss-as-7.1.3.Final.zip の入手方法 | hiro345」をご覧ください。
手元で確認したところでは、「Caused by: java.lang.ClassNotFoundException: org.jboss.as.osgi.deployment.OSGiDeploymentAttachment」といったエラーが表示されてテストが失敗します。調べてみたところ、「java.lang.ClassNotFoundException: org.jboss.as.osgi.deployment.OSGiDeploymentAttachment from [Module "deployment.arquillian-service:main" from Service Module Loader] | Arquillian | JBoss Community」のページに同じ現象についての質問があり、「Why do I get "No active contexts for scope type" when testing on JBoss AS 7 | Arquillian | JBoss Community」に解答がありました。
src/test/resources/arquillian.xml は次のようにconfiguration要素のproperty要素としてjbossHomeを追加するだけでなく、protocol要素も追加します。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="jbossas-managed" default="true"> <protocol type="Servlet 3.0"/> <configuration> <property name="jbossHome">/home/user001/applications/java/jboss</property> </configuration> </container> </arquillian>
UserInfoDaoTest.java は次のように修正をします。クラスのパッケージ名は記事とはちょっと違っているかもしれません。作成したものに合わせてください。
package jp.example.simpleapp.model.dao; import jp.example.simpleapp.model.dao.UserInfoDao; import jp.example.simpleapp.model.UserInfo; // 追加 import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OverProtocol; // 追加 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 UserInfoDaoTest { @Inject private UserInfoDao userinfodao; @Deployment @OverProtocol("Servlet 3.0") // 追加 public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class, "test.jar"). addClass(UserInfo.class). addClass(UserInfoDao.class). addAsManifestResource("META-INF/persistence.xml", "persistence.xml").addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Test public void testIsDeployed() { Assert.assertNotNull(userinfodao); } // 下記を追加 @Test public void testListUserInfo() { Assert.assertEquals(3, userinfodao.listUserInfo().size()); } }
pom.xml は次のように修正をして、JBOSS_AS_MANAGED_7.X の profile へ org.jboss.arquillian.protocol を追加します。
<?xml version="1.0" encoding="UTF-8"?> <!-- 略 --> <profiles> <profile> <id>JBOSS_AS_MANAGED_7.X</id> <dependencies> <dependency> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-arquillian-container-managed</artifactId> <version>7.1.3.Final</version> </dependency> <dependency> <groupId>org.jboss.arquillian.protocol</groupId> <artifactId>arquillian-protocol-servlet</artifactId> <scope>test</scope> </dependency> </dependencies> </profile> </profiles> </project>
以上で、JBoss AS 7.1.3 でもテストができるようになります。
- クラスベースのオブジェクト指向プログラミング言語の基礎を学ぶには … 改訂版 基礎Java(CD-ROM付) (IMPRESS KISO SERIES)
- クラスベースのオブジェクト指向プログラミング言語を学ぶには … プログラミング言語Java (The Java Series)
- 関数型プログラミング言語を学ぶには … Scalaスケーラブルプログラミング第2版
- プログラミング言語の理論を学には … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)