Specs2Gradleで使う


概要

Scalaのテストツール Specs2をGradleから使おうとした時に

つまづいたのでまとめまでに。



Specs2以外のテストツール、Scalatestだと解りやすかった

ScalatestをGradleから使う方法


Scalatestのユニットテストはこんな感じ。


import org.scalatest.FunSuite

class SampleTests extends FunSuite {
	test("Something") {
		val a = List("A", "B")
		val b = Seq("A", "B")
		assert(a == b)
	}
}


こいつを起動する事ができればOK

Gradleのtestタスクを上書きして、Scalatestを実行できれば良い。

例えばtestタスクをこんな感じにするとOK。


task test(overwrite: true, dependsOn: testClasses) << {
    ant.taskdef(name: 'scalatest',
        classname: 'org.scalatest.tools.ScalaTestAntTask',
        classpath: sourceSets.test.runtimeClasspath.asPath
    )
    ant.scalatest(runpath: 'build/classes/test',
        haltonfailure: 'true',
        fork: 'false') {reporter(type: 'stdout')}
}


タスク testClassesに依存する形で、

このタスクを実行するとまずtestClassesが実行されて、

次にantTaskとしてscalatestというのを定義、

そのままパスを与えて実行する。


インプットできるパラメータとかを明示してくれていて使いやすい。



で、Specs2

勝手が分かんなかったので、


死霊を見るに、

Specs2の死霊

http://etorreborre.github.com/specs2/guide/org.specs2.UserGuide.html#User+Guide

→Specification をextendsしたテストを書いて、タスク testで実行するようにすればよさげ。


試しに小さなテストを書いて、Gradleから実行してみる事にした。



build.gradle側記述

dependenciesに下記を記述


testCompile (
	[group: 'junit', name:'junit', version:'4.5'],
	[group: "org.specs2", name: "specs2_2.9.2", version:"1.12.1"],
	[group: 'org.specs2', name: 'specs2-scalaz-core_2.9.1',version:'6.0.1'],
)



テストクラスの内容は下記

package com.kissaki

import org.specs2.mutable._
import org.specs2.runner.JUnitRunner
import org.junit.runner.RunWith
 
@RunWith(classOf[JUnitRunner])
class SampleTests extends Specification {
	
	"Some test for my specs2 understand" should {
		"same-check between List & Seq" in {
			val a = List("A","B")
			val b = Seq("A","B")
			
			 a == b must beTrue
		}
	}
}


これらを整えた状態で、

gradle test


とやると、依存性解決してこんな感じになると思う。

スクリーンショット 2012-08-19 23.07.19.png

いつも通りGradleによるテストのreportsも作られてる。

スクリーンショット 2012-08-19 23.09.06.png

中身はこんな感じ。

スクリーンショット 2012-08-19 23.10.03.png


htmlを吐く機能が付いてるんだけど、どっちかって言うとGradleが吐く奴の方が

見た目にはすっきりしてて一次情報としてはうれしい感じ。



ここに嵌った

runner.RunWithインポートするの忘れてて、1時間くらい無駄にした。



サンプルプロジェクト

https://github.com/sassembla/ScalaSpecs2WithGradle