入力を繰り返す関数echo: String => String
をspecs2
でテストしたとします。単体での単体テスト試験
私はそのようないくつかのテストを書くことができます:
class EchoSpec extends SpecificationWithJUnit {
"echo should handle ASCII alphanumeric names" in {
echo("abc") must beEqualTo("abc")
}
"echo should handle names with slashes" in {
echo("a/b/c") must beEqualTo("a/b/c")
}
"echo should handle names with dots" in {
echo("a.b.c") must beEqualTo("a.b.c")
}
"echo should handle non-ASCII names" in {
echo("אבג") must beEqualTo("אבג")
}
}
私は定型的なコードを取り除くことを好むだろうが。だから私はcats
モノイド使用しています:
import cats.implicits._
def testEcho(expected: String): String => Option[String] = {str =>
if (str == expected) none else s"$str != expected".some
}
def testEchoes(expected: List[String]): Option[String] =
expected foldMap testEcho map (_.mkString(", "))
"echo should handle all names" {
val expected = List("abc", "a/b/c", "a.b.c", "אבג")
testEcho(expected) must beNone
}
をそれは意味を成していますか?どのように改善する/それを簡素化する? ここにモノイドが本当に必要ですか?上記のの定型コードを monoidなしで削除することはできますか?
感謝を使用することができます! 'ScalaCheck'が' specs2'と統合できることを知っておきましょう。 – Michael
でも可能ですが、私は '' echo ''' '' '' '' '' '' '' '' '' '' '' ''を使って '' echo''をテストしたいと思います。 *)) ' – Eric
もう一度ありがとうございます。上記のように 'string = foreach {s => echo(s)must beEqualTo(s)} 'よりも本当に良いですか? – Michael