日々常々

ふつうのプログラマがあたりまえにしたいこと。

TestNGのテストコードをJUnitで実行する

ふぐ鍋で忘年会と言う事で、例により開始5時間前くらいに集まって雑談してました。例により無駄に濃い内容でしたが、その中でも気を引いたのがうらがみさんのお話で、O/Rマッパーのそれぞれに対してテストコードを書かれてました。欲しくなったので*1鍋食いながら催促してみたら、その場で GitHub にあげていただけました。

忘年会が終わってからスタバで二次会(アルコール無し)、屋外で寒さに震えながらも早速 clone して mvn eclipse:eclipse して option+command+X からT で実行!

No JUnit tests found.

……。

どうも TestNG のテストコードのようです。TestNG プラグイン入れてないよ…。しかしここでプラグインを入れたら負けです。単に面倒だっただけですが。そんな事いってたら「Runner 作ったら?」と言われたので適当に書きました。

これで RunWith すれば JPASample は実行出来ました。他は知らない。

やったこと

  • BlockJUnit4ClassRunner を継承。
  • テスト対象メソッドを取得してる computeTestMethods をオーバーライド。
  • BeforeMethod/AfterMethod を実行するために methodInvoker をオーバーライド
    • withBefore/withAfter をオーバーライドしなかったのは2カ所面倒だったから…。
  • BeforeMethod の実行順(dependsOnMethodsで設定される)をリストのソートで無理矢理適用。

例外処理とかその辺は考えてません。他の諸々の機能も無視です。知りませんし。とりあえず動けばいいやって感じでやりました。でも TestNG のコードも Runner 書けば JUnit で動かせるってことです。だからどうしたとか、本末転倒とか車輪の再発明とか、その辺は気にしたら負けです。

*1:自分で書けよ