kanizaのブログ

コンピュータ、ソフトウェア、映画、音楽関連や家族のことなど、思いついたことを書きます。

今年の技術ネタ

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以降はクラスについても可能になった。すげー。モック化するためにインタフェースと実装を分離していくのも有益だけど、自分でいじれない部分はどうしようもないから助かる。