Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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
というように書く。

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

おわりに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away