specs2 よくある変換関数のテスト
scalaのテストフレームワークspecs2 で、icu をラップした String => String 関数のテストとかはこういう感じ
import org.specs2._ import org.specs2.specification._ import org.specs2.execute._ import org.junit.runner.RunWith import org.specs2.runner.JUnitRunner @RunWith(classOf[JUnitRunner]) class KanaServiceSpec extends Specification { def is = sequential ^ "hurigana" ^ when(KanaService.hurigana) ^ "ひらがな ${あるの} は ${アルノ}" ^ then ^ "半角 ${アルアノリウ} は ${アルアノリウ}" ^ then ^ "trim ${ アルアノリウ } は ${アルアノリウ}" ^ then ^ "濁音 ${ダダ} は ${ダダ}" ^ then ^ "半角濁音 ${ダダ} は ${ダダ}" ^ then ^ "全角濁音 ${タ゛ー} は ${ダー}" ^ then ^ p^ "initialLetter" ^ when(KanaService.initialLetter) ^ "ひらがな ${あるの} は ${ア}" ^ then ^ "半角 ${アルアノリウ} は ${ア}" ^ then ^ "trim ${ アルアノリウ } は ${ア}" ^ then ^ "濁音 ${ダダ} は ${タ}" ^ then ^ "半角濁音 ${ダダ} は ${タ}" ^ then ^ "全角濁音 ${タ゛} は ${タ}" ^ then ^ end def when(f:String => String)= new Given[(String => String)]{ def extract(text:String) = f } def then = new Then[(String => String)]{ def extract(addition: (String => String), desc: String): Result ={ val x = RegexStep.extract2(desc) addition(x._1) must_== x._2 } } }
このwhenとthen、もうちょっと汎用化できそう、というか既に定義されていそう。教えてください……
一応参考までにテストされるクラスはこんな感じ(型だけ)
object KanaService{ def hurigana(str:String):String = str.xxxxx def initialLetter(str:String):String = str.xxxxx }