2012/01/11(水)中島、現状維持で更改
もう昨日のことになりますが、中島が現状維持で更改したそうです。
「西武の中島」現状維持で笑顔の契約更改 - 契約更改ニュース : nikkansports.com
http://www.nikkansports.com/baseball/news/p-bb-tp1-20120111-887823.html
一年で出ていくと分かっているだけに複雑な気持ちではありますが、最後に日本一のお土産を置いていってくれると嬉しいです。
さて、片岡の復帰待ちという部分もありますが、これで今年は片岡、栗山、中島、中村というオーダーが組めます。中村の後ろを打つであろう外国人選手が当たりならば、得点力はかなりのものになるでしょう。
……シーズン終盤に浅村が5番を打っている姿しか想像できないのは気のせいでしょうか。
2012/01/10(火)帆足の補償は金銭に
結局、帆足の補償は選手ではなく金銭を選んだようです。
【西武】帆足のFA補償「金銭」に決定 - プロ野球ニュース : nikkansports.com
http://www.nikkansports.com/baseball/news/f-bb-tp0-20120110-887737.html
がっかりだ! ナベQと松中さんが談笑する眩しい絵を見たかったのに!
……と、ファンは好き勝手言っていますが、現実問題として高年俸のベテランを獲るにはリスクが高いですしね。私が松中を獲っちまえと言っていたのも、今後のことを考えて他球団を牽制するべきだという意図も含まれているので、純粋に戦力として考えると2億円を出すのは微妙というのは理解しています。
ただ、松中さんはなかったにしても、ピッチャーは本当に取れなかったんですかね? まさか本気で桟原やマイケルで完璧な補強ができたと思ってるの? そりゃ、過去の実績だけならものすごい投手陣であることは間違いないんですが……。
2012/01/09(月)Slim3のテストデータをExcelからインポートする
Slim3のアプリのテストデータをExcelで作りたいと思い、インポートするためのUtilクラスを作ってみました。
https://github.com/7pairs/Slim3Utils/blob/master/src/jp/gr/java_conf/ruquia/utils/DatastoreUtil.java
なお、このクラスを使うにはPOIが必要です。
最初はSlim3のクラスを全く使わず、GAE汎用として作るつもりでしたが、色々と面倒な処理が増えてきたので、結局BeanUtilやDatastoreに頼りまくってSlim3専用として作成しました。いずれもうちょっと拡張して、GAE汎用の形にしてみたいと思います *1 。
2012/01/08(日)賢押杯2012
2012/01/07(土)Slim3でモックテストを実施する
Slim3のアプリのテスト時に、Serviceにモックを差し込んで、Controllerのみのテストを行いたいケースがあると思います。DIコンテナを使っていれば、Serviceに注入するImplをモックにすればいいと思いますが、GAEでDIを使うのはちょっと現実的ではありません。というわけで、テスト時にDIコンテナっぽく振る舞うUtilクラスを作ってみました。
https://github.com/7pairs/Slim3Utils/blob/master/src/jp/gr/java_conf/ruquia/utils/MockUtil.java
人様に見せるんだったら、パッケージ名を取得するときにruquiaなんて名前で登録するんじゃなかったなw
さて、実際の使い方です。まず、テストしたいControllerを継承したクラスを作り、そのコンストラクタでこのUtilを使用します。以下のサンプルは、テスト対象のTestControllerにserviceというTestServiceのprivateフィールドがいること、TestServiceにはfooMethod、barMethodがいることを前提にしています。
public class TestWithMockController extends TestController { public TestWithMockController(){ super(); try{ MockUtil.inject( this, "service", new TestService() { @Override public String fooMethod() { return null; } @Override public List<String> barMethod(String arg) { return null; } } ); } catch(Exception e) { e.printStackTrace(); } } }
これでモックを差し込んだControllerができました。なお、サンプルは差し込むモックを匿名クラスにしましたが、もちろんきちんとしたクラスを作っても構いません。
さて、今度はテストプログラムのソースを修正します。Controllerのテストプログラムにtester.startメソッドを呼んでいる箇所があると思います。
tester.start("/test");
この部分を、先ほど作ったTestWithMockControllerを呼ぶように修正します。例えば、TestControllerと同じパッケージにTestWithMockControllerを作った場合、以下のように書き換えます。
tester.start("/testWithMock");
あとはテストを実行するだけです。
ちなみに、私はテストのためだけにアクセス範囲を変えるのが嫌だったのでここまでやりましたが、ぶっちゃけここまで苦労するくらいなら、最初からserviceフィールドをprotectedにして、テストプログラムから直接serviceを制御するほうがはるかに楽だったりします。このあたりは好みの問題だと思いますが。