基本的に怠Diary

学習ログを残したい

ScalaでJUnit事始めと見せかけて実は大したことできないからとりあえず初めてだから許してって気持ちかなり入ってる

仕事が辛い。無能すぎて辛い。

上司とか上司がすごく苦い顔してくるのかなり辛い。

能力は非常に高いです。私を雇う以外は特に失敗は確認できません。

人を見る目以外はとてもすごい上司です。尊敬してます。

ごめんなさいごめんなさいごめんなさい

それはさておきScalaする。

Scalaは一年ぐらいかけてのんびりやりたいのでテストとか書いて丁寧にやりたい。

いやそれが当たり前なんだけどね。

というわけでテストフレームワークを使うのは確定で、

何を使うのかと言うとタイトル通りJUnitを使って行きたいと思います。

JUnitなら仕事で使う可能性の高いJavaとかにも活かせるしいいかなーって

JUnitの技術書買ったし、

記事書くっつったし

ちなみに開発環境はZorinOSでIntelliJ Idea使ってますです。

ビルドツールはsbt使ってます。IntelliJの設定でPlugin追加してあげました。

当たり前ですがプロジェクト作成時点でJUnitなんて入ってないので

sbtの場合はインスコしてあげることを教えてあげないといけないです。

>libraryDependencies += "com.novocode" % "junit-interface" % "0.8" % "test->default"

ちなみにこの一行はぐぐって見つけたものをそのままいれてbuild moduleさせたらなんかインスコしてくれました(問題発言

alvinalexander.com

それは流石にダメだから調べてみる。

sbt Reference Manual — ライブラリ依存性

なんか公式っぽいとこにあった。

libraryDependencies += groupID % artifactID % revision

でも最後のtest->defaultってなんなのだろう

ある依存ライブラリが Test コンフィギュレーションのクラスパスには出てきてほしいが、 Compile コンフィギュレーションでは要らないという場合は、以下のように % "test" と追加する:

defaultってなんだよってば

sbt Reference Manual — Library Management

めっちゃ探した・・・・もうマヂムリ・・・

libraryDependencies += "org.scalatest" %% "scalatest" % "2.1.3" % "test->compile"

似たようなのあった

This says that your project’s "test" configuration uses ScalaTest’s "compile" configuration. See the Ivy >documentation for more advanced mappings. Most projects published to Maven repositories will use the >"compile" configuration.

Google翻訳大先輩

これは、プロジェクトの「テスト」設定がScalaTestの「コンパイル」設定を
使用していることを示しています。
より高度なマッピングについては、Ivy>のドキュメントを参照してください。
 Mavenリポジトリに公開されるほとんどのプロジェクトは、 "コンパイル"設定を使用します。

つまり「test」設定がJUnitの「default」設定を使用しているということか*1

なるほど、微妙にわからん。


クラスとかはCopの本にあるクラスを使ってテストします。

RationalTest.scala

import org.junit.{Test,Assert}
import chap6.Rational


class RationalTest {
  @Test
  def toStringTest = {
    val n = 5
    val d = 1
    val rat = new Rational(n,d)
    Assert.assertEquals(rat.toString,"created " + n + "/" + d)
  }
  @Test(expected = classOf[IllegalArgumentException])
  def zeroCheckTest = {
    val rat = new Rational(5,0)
  }
}

Assert.assertEqualsの使い方はまんまだったけど

例外投げる挙動のテストだとJavaと微妙に違ったので

かなり調べて思いつかなかったけどIntelliJくんがこれじゃねって教えてくれてなんとかできた。

@Test(expected = classOf[IllegalArgumentException])

ここなんだけど、私が見ていたJavaの技術書ではIllegalArgumentException.class

でいけるって書いてあったけどどうやらScalaではclassOfでクラスを取得するようだ。

あ、ちなみにRationalクラスはまだ途中だけどこんな感じ

class Rational(n:Int,d:Int) {
  require(d != 0)
  override def toString = "created " + n + "/" + d
}

これからもテスト頑張るぞい。

もとい、Scala一年続けることのできるように

この後滅茶滅茶参考にした。 Amazon CAPTCHA

*1:私の英語力は底辺中学生レベルです。