LoginSignup
2
0

More than 5 years have passed since last update.

デザイナーがScalaでFizzBuzzテストコードを書いてみる

Last updated at Posted at 2018-12-10

はじめに

JavaScriptは怪しいながら書けるといった程度の私が、
必要に迫られScalaでテストコードを書いてみようと思い書いてみました。
※そもそもScalaって何!?というレベルですが一旦そこはおいてきます…

プロジェクト作成

なにはともあれ、まずは「Create New Project」でプロジェクト作成をしてみます(IntelliJ)。

こちらを見ながら
ScalaTestのインストール
(IntelliJのScalaプラグインはすでに入っています)
build.sbt に下記を追加

build.sbt
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test"

ScalaTestとは?

様々なスタイルのテストを書くことができるフレームワークだそうです。
FlatSpec でテスト書けるようにしてねーとチームメンバーからお達しが。

ちょっと調べてみました

仕様テキストとテストがネストを必要とせずに左のインデントレベルに対してフラットに並んでいるため、その名前が付けられています。
FlatSpec は Spec や WordSpec のようなブロックのネストを避けた記述の BDD スタイルです。

とりあえずコレ使っとけみたいな話もあり、よくわかりません…

FizzBuzz

さて、私の認識しているFizzBuzzなのですが

  • 3の倍数の場合は、「Fizz」と表示。
  • 5の倍数の場合は、「Buzz」と表示。
  • 15の倍数の場合は、「FizzBuzz」と表示。

早速ですがこちらを書いてみました。

FizzBuzzSpec.scala
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")
  }
}
FizzBuzz.scala
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
というように書く。

途中の過程を色々飛ばしてしまいましたが、まずはこんな感じ。

おわりに

色々と怪しいところ(ツッコミどころ)足りない部分等あるのですが
とりあえず触ってみれたということが大きいかなと個人的には思っています。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0