「小山博史の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版
- プログラミング言語の理論を学には … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)