前回の続き
arquillian のテストまでやっときます。
ファイル準備
テスト用のパッケージ追加と arquillian 用の設定ファイルなどを作成しておきます。
mkdir -p src/test/java/example/service mkdir -p src/test/resources/META-INF touch src/test/java/example/service/MemberRegistrationTest.java touch src/test/resources/META-INF/test-persistence.xml touch src/test/resources/arquillian.xml touch src/test/resources/test-ds.xml
test-ds.xml
テスト用のデータソース設定です。
<?xml version="1.0" encoding="UTF-8"?> <datasources xmlns="http://www.jboss.org/ironjacamar/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd"> <datasource jndi-name="java:jboss/datasources/SampleTestDS" pool-name="sample-test" enabled="true" use-java-context="true"> <connection-url>jdbc:h2:mem:sample-test;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> </datasources>
SampleTestDS
という名前でデータソース定義しました。
test-persistence.xml
テスト用の永続化設定です。
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="primary"> <jta-data-source>java:jboss/datasources/SampleTestDS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.show_sql" value="false" /> </properties> </persistence-unit> </persistence>
先ほどの ExampleTestDS
というデータソースを指定して永続化設定を行いました。
arquillian.xml
arquillian の設定です。
<?xml version="1.0" encoding="UTF-8"?> <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"> <defaultProtocol type="Servlet 3.0" /> <container qualifier="jboss" default="true"> <configuration> <property name="jbossHome">wildfly/wildfly-8.2.0.Final/wildfly-8.2.0.Final</property> <property name="serverConfig">standalone-full.xml</property> </configuration> </container> </arquillian>
jbossHome
の設定が必要なため、configuration
要素にプロパティで指定しています。
JavaEE のフルプロファイルを使うため、明示的に standalone-full.xml
を指定します。
設定ファイルはこれで終了です。
MemberRegistrationTest.java
テストコードを作成します。今回は MemberRegistration
のテストを Java EE コンテナ上で行います。
package example.service; import static org.junit.Assert.assertNotNull; import javax.inject.Inject; import example.model.Member; import example.Resources; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class MemberRegistrationTest { @Deployment public static Archive<?> createTestArchive() { return ShrinkWrap.create(WebArchive.class, "test.war") .addClasses(Member.class, MemberRegistration.class, Resources.class) .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") .addAsWebInfResource("test-ds.xml"); } @Inject MemberRegistration memberRegistration; @Test public void testRegister() throws Exception { Member newMember = new Member(); newMember.setName("Jane Doe"); newMember.setEmail("jane@mailinator.com"); memberRegistration.register(newMember); assertNotNull(newMember.getId()); } }
@RunWith(Arquillian.class)
にて Arquillian でテストするようにします。
ShrinkWrap
にて War を作成します。先ほど作成した設定ファイルをリソースとして加えます。
後は @Inject
にて CDI で MemberRegistration
が使えるので、永続化を行うテストを書きます。
build.gradle
下部 3 つの依存を追加します。
dependencies { providedCompile 'org.jboss.spec:jboss-javaee-all-7.0:1.0.2.Final' testCompile 'junit:junit:4.11' testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:1.1.7.Final' testCompile 'org.jboss.arquillian.protocol:arquillian-protocol-servlet:1.1.7.Final' testCompile 'org.wildfly:wildfly-arquillian-container-managed:8.2.0.Final' }
さらにリポジトリの定義も追加します。
repositories {
mavenCentral()
maven { url "https://repository.jboss.org/nexus/content/groups/public/" }
}
実行
テストを実行します。
./gradlew test
wildfly が起動してテストが走ります。
テスト結果を確認してみます。
file:///<PATH-TO-PROJECT-DIR>/example/build/reports/tests/index.html
グリーンとなっていることが確認できますね。