実行するテストは、Tagで指定できます。 とりあえず、sbtでテストを実行するところから。

まずはプロジェクトを作る

D:\dropbox\work>mkdir nyaruko
 
D:\dropbox\work>cd nyaruko
 
D:\dropbox\work\nyaruko>sbt
[info] Loading global plugins from C:\Users\kakkyz\.sbt\plugins
[info] Set current project to default-1a8bdf (in build file:/D:/dropbox/work/nyaruko/)
> test
[info] Updating {file:/D:/dropbox/work/nyaruko/}default-1a8bdf...
[info] Resolving org.scala-lang#scala-library;2.9.1 ...
[info] Done updating.
[info] No tests to run for test:test
[success] Total time: 0 s, completed 2012/05/27 10:19:53
> exit
 
D:\dropbox\work\nyaruko>

テストが実行できるように、ライブラリを追加します

D:\dropbox\work\nyaruko>gvim build.sbt

build.sbt (以下の1行だけ)

libraryDependencies += "org.scalatest" %% "scalatest" % "1.7.2" % "test"

テスト対象のソースとテストソースを作ります

D:\dropbox\work\nyaruko>mkdir src\main\scala
 
D:\dropbox\work\nyaruko>gvim src\main\scala\naryuko.scala

nyaruko.scala ソースはutf-8で保存します。

package net.krks.nyaruko
 
class Nyaruko {
  var sinryaku = false
  def say() : String = {
    if ( !sinryaku ) {
      "ニャルラトホテプです!!"
    } else {
      "イカ娘でゲソ!"
    }
  }
}
 
object main {
  def main(args: Array[String]) {
    val nyaruko = new Nyaruko
    println(nyaruko.say())
    nyaruko.sinryaku = true
    println(nyaruko.say())
  }
}


sbtでrunしてみます。

D:\dropbox\work\nyarkuko>sbt
[info] Loading global plugins from C:\Users\kakkyz\.sbt\plugins
[info] Set current project to default-d9abe8 (in build file:/D:/dropbox/work/nyark> run
[info] Updating {file:/D:/dropbox/work/nyarkuko/}default-d9abe8...
[info] Resolving org.scala-lang#scala-library;2.9.1 ...
[info] Resolving org.scalatest#scalatest_2.9.1;1.7.2 ...
[info] Done updating.
[info] Compiling 1 Scala source to D:\dropbox\work\nyarkuko\target\scala-2.9.1\cla[info] Running net.krks.nyaruko.main
ニャルラトホテプです!!
イカ娘でゲソ!
[success] Total time: 1 s, completed 2012/05/27 23:14:08
>


テストを作ります

D:\dropbox\work\nyarkuko>mkdir src\test\scala
D:\dropbox\work\nyarkuko>gvim src\test\scala\nyarukoSpecs.scala
D:\dropbox\work\nyarkuko>

naryukoSpecs.scala

import net.krks.nyaruko._
 
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.FunSpec
import org.scalatest.Tag
import org.scalatest.GivenWhenThen
 
object allTest extends Tag("net.krks.nyaruko.allTest")
object fastTest extends Tag("net.krks.nyaruko.fastTest")
 
class NyarukoSpecs extends FunSpec with ShouldMatchers with GivenWhenThen {
  describe("ニャル子さんのセリフ") {
    it("いつもニコニコ(ry", fastTest, allTest) {
      val nyaruko = new Nyaruko
      when("いつもニコニコあなたの隣に")
      given("這い寄る混沌")
      then("ニャルラトホテプです!!")
      nyaruko.say should be ( "ニャルラトホテプです!!" )
    }
 
    it("侵略されている場合", allTest) {
      val nyaruko = new Nyaruko
      nyaruko.sinryaku = true
      when("侵略!侵略!侵略!")
      then("イカ娘でゲソ!")
      nyaruko.say should be ( "イカ娘でゲソ!" )
    }
  }
}

sbtで、すべて実行します

D:\dropbox\work\nyarkuko>sbt
[info] Loading global plugins from C:\Users\kakkyz\.sbt\plugins
[info] Set current project to default-d9abe8 (in build file:/D:/dropbox/work/nyark> test
[info] Compiling 1 Scala source to D:\dropbox\work\nyarkuko\target\scala-2.9.1\tes[info] NyarukoSpecs:
[info] ニャル子さんのセリフ
[info] - いつもニコニコ(ry
[info]   + When いつもニコニコあなたの隣に
[info]   + Given 這い寄る混沌
[info]   + Then ニャルラトホテプです!!
[info] - 侵略されている場合
[info]   + When 侵略!侵略!侵略!
[info]   + Then イカ娘でゲソ!
[info] Passed: : Total 2, Failed 0, Errors 0, Passed 2, Skipped 0
[success] Total time: 5 s, completed 2012/05/27 23:17:24
>

侵略されるケースは稀ですし、実行するのはニャル子さんのセリフだけにします。

ココが本来今回の記事で書きたかったことです。 test-onlyで指定すると、-n オプションで実行したいテストだけを指定できます。

> test-only * -- -n net.krks.nyaruko.fastTest
[info] NyarukoSpecs:
[info] ニャル子さんのセリフ
[info] - いつもニコニコ(ry
[info]   + When いつもニコニコあなたの隣に
[info]   + Given 這い寄る混沌
[info]   + Then ニャルラトホテプです!!
[info] Passed: : Total 1, Failed 0, Errors 0, Passed 1, Skipped 0
[success] Total time: 0 s, completed 2012/05/27 23:18:21
>

逆に、ニャル子さんを除いた場合は、-lオプションを指定します。

> test-only * -- -l net.krks.nyaruko.fastTest
[info] NyarukoSpecs:
[info] ニャル子さんのセリフ
[info] - 侵略されている場合
[info]   + When 侵略!侵略!侵略!
[info]   + Then イカ娘でゲソ!
[info] Passed: : Total 1, Failed 0, Errors 0, Passed 1, Skipped 0
[success] Total time: 0 s, completed 2012/05/27 23:19:38

これで、scalatestで指定したテストだけ実行する方法がわかりました。
ネットワーク経由になったりして、重くなるテストを実行するのはある程度まとまったタイミングでやりたい、という時に使えそうです。

ちなみに、sbtは~経由で起動するとファイル保存のタイミングで自動でテストを実行してくれるので便利です。
イカの図はイカ娘のセリフをちょっと変えてみた図。失敗がすぐわかるでゲソ。

Pocket

Comments are closed.