はじめに
JavaScriptは怪しいながら書けるといった程度の私が、
必要に迫られScalaでテストコードを書いてみようと思い書いてみました。
※そもそもScalaって何!?というレベルですが一旦そこはおいてきます…
プロジェクト作成
なにはともあれ、まずは「Create New Project」でプロジェクト作成をしてみます(IntelliJ)。
こちらを見ながら
ScalaTestのインストール
(IntelliJのScalaプラグインはすでに入っています)
build.sbt
に下記を追加
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test"
ScalaTestとは?
様々なスタイルのテストを書くことができるフレームワークだそうです。
FlatSpec
でテスト書けるようにしてねーとチームメンバーからお達しが。
ちょっと調べてみました
仕様テキストとテストがネストを必要とせずに左のインデントレベルに対してフラットに並んでいるため、その名前が付けられています。
FlatSpec は Spec や WordSpec のようなブロックのネストを避けた記述の BDD スタイルです。
とりあえずコレ使っとけみたいな話もあり、よくわかりません…
FizzBuzz
さて、私の認識しているFizzBuzzなのですが
- 3の倍数の場合は、「Fizz」と表示。
- 5の倍数の場合は、「Buzz」と表示。
- 15の倍数の場合は、「FizzBuzz」と表示。
早速ですがこちらを書いてみました。
import org.scalatest.FlatSpec
import foo.FizzBuzz
class FizzBuzzSpec extends FlatSpec {
"FizzBuzz" should "3の倍数の場合は、「Fizz」を返す" in {
assert(FizzBuzz.result(3) == "Fizz")
assert(FizzBuzz.result(6) == "Fizz")
}
it should "5の倍数の場合は、「Buzz」を返す" in {
assert(FizzBuzz.result(5) == "Buzz")
assert(FizzBuzz.result(10) == "Buzz")
}
it should "15の倍数の場合は、「FizzBuzz」を返す" in {
assert(FizzBuzz.result(15) == "FizzBuzz")
assert(FizzBuzz.result(30) == "FizzBuzz")
}
}
package foo
object FizzBuzz {
def result(n: Int): String = {
if(n % 15 == 0) {
"FizzBuzz"
}
else if(n % 5 == 0) {
"Buzz"
}
else {
"Fizz"
}
}
}
"FizzBuzz" should "3の倍数の場合は、「Fizz」を返す" in
というように書く。
途中の過程を色々飛ばしてしまいましたが、まずはこんな感じ。
おわりに
色々と怪しいところ(ツッコミどころ)足りない部分等あるのですが
とりあえず触ってみれたということが大きいかなと個人的には思っています。