Scala+SpecsでMavenなJavaプロジェクトのテストを書く
Specsは、Scalaで使えるBDDなテスティングフレームワークです。JUnit4アダプタが提供されており、Mavenに組み込んで使うことが可能!ということで、MavenなJavaプロジェクトのテストをScala+Specsで書く手順をまとめてみます。
といっても基本的には、
するだけ。依存モジュールなどはMavenが集めてきてくれます。
なお、SpecsについてはQuickStartぐらいしか読んでないので、変なこと書いてたらゴメンナサイ。
MavenなJavaプロジェクト
以下のような簡単な構成のJavaプロジェクトを例として説明します。
<プロジェクトルート> ├pom.xml └src └main └java └com └example └Kitten.java
src配下の「com.example.Kitten」がテスト対象のクラスです。実装は次の通り。普通のJavaBeanです。
package com.example; public class Kitten { private String name = ""; private int age = 0; public Kitten (){} public Kitten ( String name, int age ) { this.name = name; this.age = age; } public String getName () { return name; } public void setName ( String name ) { this.name = name; } public int getAge () { return age; } public void setAge ( int age ) { this.age = age; } }
1.pom.xmlにScalaでのビルドの設定などを書く
Mavenのpom.xmlにSpecsを使うために必要な設定を追加していきます。ポイントは次の2つ。
最終的には、こんな感じのpom.xmlになります。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>specs-test</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>specs-test</name> <build> <!-- scalaプラグインを追加 --> <plugins> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <executions> <!-- mvn compile で実行されるようにgoalを追加する。 --> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> <!-- scalaのバージョンは最新に。--> <configuration> <scalaVersion>2.7.1</scalaVersion> </configuration> </plugin> </plugins> </build> <!-- プラグインの取得先リポジトリの設定 --> <repositories> <repository> <id>scala-tools.org</id> <name>Scala-tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>scala-tools.org</id> <name>Scala-tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </pluginRepository> </pluginRepositories> <dependencies> <!-- 依存モジュールとして、scala-libraryとspecsを追加 --> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.7.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.specs</groupId> <artifactId>specs</artifactId> <version>1.3.0</version> <scope>test</scope> </dependency> </dependencies> </project>
2.Specsのテストを書く
Specsのテストを書いて、「src/test/scala」に配置します。
<プロジェクトルート> ├pom.xml └src ├main │└java │ └com │ └example │ └Kitten.java └test └scala ←ここに配置 └com └example └KittenSpec.scala
「KittenSpec.scala」の中身は以下のとおり。MavenからはJUnit4のテストケースとして実行するため(→Run your specifications with JUnit4 and Maven)、アダプタ?も定義しておきます。
import org.specs._ import org.specs.runner.JUnit4 import com.example.Kitten /** * Kitten の Specification。 */ object KittenSpec extends Specification { "kitten( 'mii', 2 )" should { "getNameは'mii'を返す" in { new Kitten( "mii", 2 ).getName must be("mii") } "getAgeは2を返す" in { new Kitten( "mii", 2 ).getAge must be(2) } } } // JUnit4で実行するためのアダプタも定義しておく。 class KittenTest extends JUnit4(KittenSpec)