1月に「今年の技術ネタは何かなぁ」と書いて、当時はGroovyあたりかと想像していたのだけど、けっきょくGroovyはぜんぜん使わず。それで、いま振り返ってみると jMock 2 が大きかったように思う。
前はjMock 1.xを使っていて、2を使いはじめたのは5月ごろ。jMock 2ではJava 5のGenericsをうまく活用していて、テストケースが書きやすくなった。
たとえば MyType 型のモックオブジェクト"mock"のメソッドcallBack()がString型引数"foo"で呼ばれることテストしたいとき、前は
mock.expects(once()).method("callBack").withArgument(eq("foo"));
って書いてたのが
one(mock) .callBack("foo")
って書けちゃう。
one(mock) の戻り値がGenericsでMyType型になっているから、callBack メソッドを文字列リテラルで指定しなくても直接書けてしまう。中では Proxy オブジェクトの生成とかがんばっているのであろう。
jMock 2が出た当初はインタフェースについてしかモックオブジェクトを生成できなかったのが、2.2以降はクラスについても可能になった。すげー。モック化するためにインタフェースと実装を分離していくのも有益だけど、自分でいじれない部分はどうしようもないから助かる。