私は昨日Scalaの学習を始めました。新しい言語を学ぶときに好きなことの1つは、マイクロTDDライブラリを作成しようとしていることです。Scala - "assertThrows"メソッドはどのように行うのですか?
これは私がこれまでに得たものである:assert
ため
def assert(condition: Boolean, message: String) {
if(!condition){ throw new AssertionError(message) }
}
def assertThrows[E](f: => Unit) {
try {
f
} catch {
case e: E => { return }
case _: Exception => { }
}
throw new AssertionError("Expected error of type " + classOf[E])
}
コードはうまく動作しますが、私はassertThrows
には二つの問題を抱えています。
- 最後の行に
E
を使用できないようです。私が何をしても、class type expected but E found error
が得られます。 - 私は最後の行(例えば、
throw new AssertionError("error expected")
ことによってそれを置き換える)からEを削除した場合、私はこれを取得:warning: abstract type E in type pattern is unchecked since it is eliminated by erasure
私は私がいる二つの問題は、おそらく方法スカラ座(とと関連していると思いますjava)抽象型を扱い、どのようにそれらが行われます。
私は自分のassertThrowsを修正できますか?
ボーナスポイント:「ブロックタイプ」(f: => Unit
)を指定する方法は正しいですか?
私はずっと前に質問したことがあります:http://stackoverflow.com/questions/7699709/scala-expected-exception-snippet –