scala-testgenというテスト自動生成ツールをつくりました
少し前になりますが、scala-testgenというライブラリをつくりました。
Scalaのテストケースのひな形を自動生成するツールです。
https://github.com/seratch/scala-testgen
https://github.com/seratch/testgenerator
セットアップ
scala-testgen testgenerator はGithub Pagesでホストしているmavenリポジトリからダウンロードできます。
sbt 0.11.0では、project/plugins.sbtに以下を追加するだけで使うことができます。*1
resolvers ++= Seq( "seratch" at "http://seratch.github.com/mvn-repo/releases" ) addSbtPlugin("com.github.seratch" %% "testgen-sbt" % "0.1")resolvers += "sonatype" at "http://oss.sonatype.org/content/repositories/releases" addSbtPlugin("com.github.seratch" %% "testgenerator" % "1.1.0")
使い方
例えば以下のようなクラスがあるとして
package com.example case class Name(first: String, last: String)
sbtでtestgen test-gen コマンドを実行すると
$ sbt > test-gen com.example.Name "com.example.NameSuite" created.
以下のようなテストケースが作成されます。
package com.example import org.scalatest._ import org.scalatest.matchers._ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner class NameSuite extends FunSuite with ShouldMatchers { test("available") { val first: String = "" val last: String = "" val instance = new Name(first,last) instance should not be null } }
また「src/main/scala/com/example/models.scala」というソースファイルに複数のクラスが入っているようなケースでは
package com.example case class Staff(id: Long, name: String, ...) case class Company(id: Long, name: String, ...) case class Stock(id: Long, itemId: Long, ...)
ファイルパスとして指定するとソース内のclassやobject、traitに対してテストを生成します。
既にテストがある場合は何もしません。
$ sbt > test-gen com/example/models.scala "com.example.StaffSuite" already exists. "com.example.CompanySuite" already exists. "com.example.StockSuite" created.
カスタマイズ
生成するテストのテンプレートはデフォルトではScalaTestのFunSuite FlatSpec になっていますが、他のテンプレートやspecs、specs2を使う事もできます。
- テストのテンプレート
-
- ScalaTestのFunSuite
- ScalaTestのAssertions
- ScalaTestのSpec
- ScalaTestのWordSpec
- ScalaTestのFlatSpec(デフォルト)
- ScalaTestのFeatureSpec
- specsのSpecification
- specs2のSpecification
- ScalaTestのMatchers指定
-
- ShouldMatchers(デフォルト)
- MustMatchers
- なし
なお、0.1ではsbtでのカスタマイズ設定に対応できていません。
とりあえず、Javaのシステムプロパティで指定できますが、これについては改善点と認識しています。
java -jar sbt-launch.jar \ -Dtestgen.srcDir=src/main/scala \ -Dtestgen.srcTestDir=src/test/scala \ -Dtestgen.encoding=UTF-8 \ -Dtestgen.testTemplate=scalatest.FunSuite \ -Dtestgen.scalatest.Matchers=ShouldMatchers
(追記)
その後、sbt での設定に対応しました。build.sbt にこのように書けます。
import testgenerator.SbtKeys._ seq(testgeneratorSettings: _*) testgeneratorEncoding in Compile := "UTF-8" testgeneratorTestTemplate in Compile := "scalatest.FlatSpec" testgeneratorScalaTestMatchers in Compile := "ShouldMatchers" testgeneratorWithJUnitRunner in Compile := false testgeneratorLineBreak in Compile := "LF"
Happy Testing!
その他、詳細についてはgithubのドキュメントをご覧ください。
Scalaでテストをたくさん書いているという方はぜひ使ってみてください。
https://github.com/seratch/scala-testgen
https://github.com/seratch/testgenerator