めげずにデバッグ

ようやくまともにテストが実行されるようになった。やっぱり今日もはまったところがあったので備忘録として書いておく。(Mavenと関係ないところもあるけど)

  1. 意図していないVersionのライブラリがテストクラスパスに追加される
    • Mavenの依存関係解決は、ライブラリが依存している他のライブラリについても解決してくれて非常にこれは便利なのだが、ある特定Versionでないと動かなくてテスト時に落ちていた。これはPOMでVersionを指定して解決。
  2. EJBException#getCause()でネスト例外が取得できずnullが返る
    • UnitTest実行時はejb-api-3.0.jarを使用してます。これだとnullが返る。getCausedByException()使えっちゅーことか。jbossに付属のJARを使うとgetCause()でも取れるんだがなぁ。。。
  3. テストが書かれていないテストクラスを実行しようとしてエラー
    • ○○Testクラスをテスト対象としているのだが、@Testが一つもないとエラーとされちゃう。これはTestを書いてないただのサンプルコードなのでクラス名を変えて対応。
  4. org.junit.Assert#assertEquals(Object expected, Object actual)の挙動が異なる
    • Eclipseでは、3.3に付属のJUnit4.3.1を使用していたが、Maven環境では最新版の4.4を使用しており、この問題が発生していた。JUnitのリリースノートを見て解決。BugFixでメソッドの挙動が変わってた。値は同じだけど型が異なる数値を比較すると、4.3ではOKだったのだが、4.4だとNG。

Bug fix (1715326): assertEquals now compares all Numbers using their native implementation of equals. This assertion, which passed in 4.3, will now fail:

assertEquals(new Integer(1), new Long(1));

Non-integer Numbers (Floats, Doubles, BigDecimals, etc), which were compared incorrectly in 4.3, are now fixed.

http://junit.sourceforge.net/doc/ReleaseNotes4.4.html


結局のところ、はまったのはEclipse上とは異なるライブラリを使ってテストを実行しちゃったからのが大部分。
最初から、POMで定義したVersionのライブラリを使うようにしていれば良かったのだが、、、中途半端にMavenizedされた環境だったのでそこまでできず、今に至る。

ちなみに、テスト実行時のクラスパス情報は、mvnコマンドに-Xを付けてデバッグモードにして確認できます。