LL脳がscalaの勉強を始めたよ その41


Scalaコップ本の14章の続きをやりますよー。14章はテスト関連なのですが、今回はJUnitとかそのあたりをやりますよ

JUnitTestNGの使い方

Javaの世界でポピュラーな単体テストフレームワークJUnitTestNGScalaコードで利用する方法について触れていきますよー

ScalaJUnit

JUnitScalaで使ってみようサンプルですよー、ちなみにjunitは別途用意しないとダメそうですねー(ここではJUnitからjarファイルを落としてきてscala -classpath とかで使ってマス)

テスト元のファイル(Hoge.scala)

class Hoge {
  def moge = 2
  def huga = 3
}

テスト用のファイル(HogeTest.scala)

import junit.framework.TestCase
import junit.framework.Assert.assertEquals
import junit.framework.Assert.fail
class HogeTestCase extends TestCase {
  def testMoge(){
    val h = new Hoge
    assertEquals(2, h.moge)
    try {
      h.huga + h.moge
      fail()
    }catch{
      case e:IllegalArgumentException => print("エラーです")
    }
  
  }
}

とりあえずそれっぽいソースは書いてみましたが…イマイチ実行方法がわかりません(´・ω・`)、これどうやってテストするの?

JUnitによるテスト実行

いろいろ調べてみたらJUnitをインポートしてコンパイルしたものを別途コマンドで執行ずればいいっぽい…ほんとか?

// コンパイルー
$ scalac -cp junit.jar *.scala

// 環境変数にJUnit関係の値をセット!
$ export JUNIT_HOME=<JUNIT関連のディレクトリパス>
$ export CLASSPATH=$JUNIT_HOME/junit-4.8.2.jar // junitファイル指定

// JUnit実行ー
$ scala -cp junit.jar junit.textui.TestRunner HogeTest

// おお、ちゃんと実行されて失敗したー
.F
Time: 0.003
There was 1 failure:
1) testMoge(HogeTest)junit.framework.AssertionFailedError: null
	at HogeTest.testMoge(HogeTest.scala:10)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at scala.tools.nsc.ObjectRunner$$anonfun$run$1.apply(ObjectRunner.scala:75)
	at scala.tools.nsc.ObjectRunner$.withContextClassLoader(ObjectRunner.scala:49)
	at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:74)
	at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:154)
	at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

FAILURES!!!
Tests run: 1,  Failures: 1,  Errors: 0

…と半ば無理やりですけどもJUnitを使ってみましたよー

今回は以上ですー

JUnit関係の使い方をさまよってたら時間切れでしたー、次回はScalaJUnitTestNG周りですかねー。ちょっと他の内容もやり始めたので若干ペース落ち気味になりますが、が、がんばります(´・ω・`)