モロッコ会
4年前にモロッコに行ったときのメンバーの集まり。
だんだん会う間隔が開いてきているので、すごい久しぶり。
結婚したりお子さんが生まれたりといろいろあった後なので会えてよかった。
浅草雷門 ⇒ スカイツリー ⇒ モロッコ料理屋 ⇒ 浅草の旅館 ⇒ 築地場外市場
雷門は、タイルの張り替えらしく入り口の半分くらいは見えなかった。
反対側からだと全貌が見えるので、大混雑。
仲見世通りは大混雑なので、甘味処で一休み。
浅草から東京スカイツリーを目指して歩いてみる。
目印はわかりやすいけど、道はちょっとわかりにくかったかな。
東京タワーのほうが迫力があったような気がするのは、下に向けて広がるカーブのせいか。
スカイツリーはシュッとしてて、見上げても高さはあんまり感じない。
最初の入場券で入れる展望エリア『天望デッキ』350m 。
ものすごく良い天気だったのに、ガスってて遠くはあんまり見えなかった。
空気が湿ってるんだろう。
1030円で追加チケットを買って『天望回廊』450m に向かう。
ちょうど日が暮れてきて、写真タイム。
最後に天望デッキに戻ってきて、ガラス床。
カメラを通して見てるときは平気だったのに、直接見たら怖かった。
やっぱり高所に対する恐怖は、以前よりも増している。
飯田橋のタジンやというモロッコ料理屋でディナー。
ベルベル人がオーナーで、ちゃんとモロッコで食べた味がして懐かしかった。
モロッコで飲んだ覚えがないけど、カクテルも何種類かあった。
締めはミントティー。
ちょっとミントが足りなかったかなーと思うけど、日本で入手するの難しそうだし仕方ないかもな。
いやー懐かしかった。
翌日、旅館でくつろいだ後、築地。
テリー伊藤の兄の玉子焼き屋さんが大人気だった。
100円で一切れという売り方がいいね。
意外に甘めだったのは、寿司ネタとしての玉子焼きだからかな。
特大の生牡蠣500円。
全体をぐるぐる回って、ちょっと早めのランチ。
具の組み合わせがいろいろあって、マグロ、サーモン、ウニが乗った丼を探した結果がこいつ。
お腹満腹で大満足。
銀座へ移動して、歌舞伎座を外観だけ見て、またうろうろ。
近々歌舞伎も見てみたいものである。
そして解散。
結婚、出産と周りの皆さんのライフステージが変わっていく。
わたしもその流れに乗りたい^^;
たとえ明日が来なくても
ニューヨークに住むインド人のナイナは、日々の母と祖母の喧嘩に疲れていた。
親友である男友達ローヒトの存在が唯一の癒しだったが、彼と付き合う気はなかった。
隣に陽気な若者アモンが引っ越してきて、アモンに惹かれ、ローヒトと三角関係になる。
これぞTHEインド映画。
3時間を超える長編なのだが、半分くらいは歌とダンスのミュージカル調。
そんな調子なので、すごいシリアスなシーンでも、コメディに見えてしまう。
ここを挿入歌かと思って油断して見ていると、話がすっ飛ぶ。
重要な場面は歌に乗ってさらっと流れていったりする。
ストーリーは単純。
インド人の感性や人生観が垣間見えるのがおもしろい。
同じインド人でも民族はいろいろなようで、結婚にあたっては気にするようだ。
数十年後には経済が世界No.1になると予想されているインド。
その頃にはこのドタバタが当たり前になって、だいぶ違った世界になってるのかな。
ニューヨークが舞台なのに、完全にインドだったもん。
それにしても、ローヒトが可哀想だな~って。。
PowerMockito
昨日の Mockito の続きとして、今度は PowerMockito.
https://code.google.com/p/powermock/
PowerMock という名前が正しいのかな?
PowerMock + Mockito = PowerMockito ということでいっか。
このページがだいぶ役に立った。
How to use PowerMock and Mockito to test static and private methods
昨日の Mockito と同じ例を使う。
内部でしか呼んでいない getHttpClient() を private メソッドに変えたことが、昨日と違うところ。
例えば、TestTarget というクラスがあるとする。
getData() が内部で HttpClient を使って通信して、その結果を返すとする。
ここで HttpClient をモックにしたいので、getHttpClient() というメソッドを作り、その動作を置き換える。
@RunWith(PowerMockRunner.class) @PrepareForTest(TestTarget.class) public Class TestTarget { public TestTarget(String arg1, String arg2) { } public String getData() { HttpClient httpClient = getHttpClient(); HttpResponse response = httpClient.execute(... String result = ... return result; } private HttpClient getHttpClient() { return HttpClients.createDefault(); } }
0. Class に Annotation として @RunWith, @PrepareForTest をつける。
1. PowerMockito.spy にテスト対象のクラスを渡して、メソッドを差し替える準備をする。
TestTarget instance = PowerMockito.spy(new TestTarget("TEST_VALUE1","TEST_VALUE2"));
2. doReturn と when で何をしたら何を返すかを書く。
getHttpClient() を呼んだら、モックである httpClientMock を返すようにする。
ここも Mockito とは違うところで、when と thenReturn だとうまくいかない。
HttpClient httpClientMock = Mockito.mock(HttpClient.class); PowerMockito.doReturn(httpClientMock).when(instance, "getHttpClient");
3. 置き換え後のインスタンスでテストをする。
Assert.assertNotNull(instance.getData());
4. HttpClient の代わりに HttpClientMock が呼ばれる。
こんな感じで使う。
モックに差し替えるためだけに Getter を用意した。
それだけの変更で済んだので個人的にはよし。
当然このようなメソッドは private であるべきなので、PowerMockito を使った。
だけど、どうやらこのやり方はCoolじゃないらしいとTwitterでコメントくれた人がいた。
その人がどこかにまとめると言っていたので、もしそれを読む機会があったら書き足すつもり。
Mockito
ユニットテストを書くときに、HttpClient など通信をするモジュールを使ってると、
実際に通信が始まっちゃうと困ることが多々ある。
その通信部分をモックに置き換えて、テスト用の出力を返してもらうだけにする。
JUnit を使っているのだが、どうやってモックに置き換えるかが問題。
実際に使ったのは PowerMockito だけど、まずはその元となっている Mockito から紹介。
https://code.google.com/p/mockito/
モックを生成するのは、単純に Mockito.mock を呼べばいい。
指定したクラスのインスタンスを作ってくれるので、テスト対象のクラスに投げるのに使える。
例えば、HttpResponse のインスタンスが欲しいなーと思っても、
new して作ると、引数が必要だったり、その引数を用意するために別のインスタンスが必要だったりする。
それが1行書くだけでいいので、実際のインスタンス生成のメンドクサさはなくなる。
HttpResponse httpResponseMock = Mockito.mock(HttpResponse.class);
ただ、モックもちゃんと動作をしてもらわないとテストに使えないので、必要なメソッドだけ動作を定義する。
例えば、そのモックの getStatusLine() を呼んだら statusLineMock を返すようにする。
その statusLineMock もモックで作っておき、getStatusCode() が呼ばれたら SC_OK を返す、など。
StatusLine statusLineMock = Mockito.mock(StatusLine.class); Mockito.when(statusLineMock.getStatusCode()).thenReturn(HttpStatus.SC_OK); Mockito.when(httpResponseMock.getStatusLine()).thenReturn(statusLineMock);
この Mockito.mock だとインスタンスを丸ごとがモックになる。
本物のインスタンスの動きをして欲しい部分があるときには逆にメンドクサイ。
そういうときに使うのが、Mockito.spy というもの。
テスト対象のクラスはモックにするわけにはいかず、実際の動作をしてくれないとテストの意味が無い。
そこで、どうしてもモックにしたいメソッドだけを指定する。
・Mockito.mock は全体をモックにしてからメソッドを置き換えて動作を定義していく
・Mockito.spy は本物をベースにしてメソッドを一部モックにする
例えば、TestTarget というクラスがあるとする。
getData() が内部で HttpClient を使って通信して、その結果を返すとする。
ここで HttpClient をモックにしたいので、getHttpClient() というメソッドを作り、その動作を置き換える。
public Class TestTarget { public TestTarget(String arg1, String arg2) { } public String getData() { HttpClient httpClient = getHttpClient(); HttpResponse response = httpClient.execute(... String result = ... return result; } public HttpClient getHttpClient() { return HttpClients.createDefault(); } }
1. Mockito.spy にテスト対象のクラスを渡して、メソッドを差し替える準備をする。
TestTarget instance = Mockito.spy(new TestTarget("TEST_VALUE1","TEST_VALUE2"));
2. when と thenReturn で何をしたら何を返すかを書く。
getHttpClient() を呼んだら、モックである httpClientMock を返すようにする。
Mockito だと差し替え対象のメソッド getHttpClient() は public じゃないといけないという制約がある。
HttpClient httpClientMock = Mockito.mock(HttpClient.class); Mockito.when(instance.getHttpClient()).thenReturn(httpClientMock);
3. 置き換え後のインスタンスでテストをする。
Assert.assertNotNull(instance.getData());
4. HttpClient の代わりに HttpClientMock が呼ばれる。
こんな感じで使う。
ポイントは 2. の箇所で、public メソッドじゃないとダメなところ。
この部分を private メソッドでもOKにしたのが、PowerMockito なのである。
つづく
インバスケット実践トレーニング
著: 鳥原 隆志
雑用も含めていろんな仕事がわーっと降ってきたときに、
どう優先順位をつけるべきか、どう決断するべきか、どう行動すべきかといったことを考える本。
会社員の仕事の様子がストーリー仕立てになっていて、どう判断するかを問われる。
著者の考えも書いてあるけど、もともと正解のない問題なので、正解がどれというわけではない。
こういう状況に対応していくのは、わりと得意なほうだとは思う。
もっとも、頭でわかってるのと実際に行動するのは違うと書かれていたけど。
私の場合は主に大学のとき、放研のPAパートで鍛えられたと思う。
時間もお金もないし、人手が少なすぎたり多すぎたりするし、リアルタイムで結果が必要だし。
決まった正解がないということをわかった上で、
自分側は自身の得じゃなくて全体を見て、相手から見た利点欠点を重視して考えていく。
仕事の上で必要だったことはあんまりないなぁ。
前々職のときが一番関係あったかな~という程度か。
今も一応チームで動いているとはいえ、完全にフラットだしねぇ。
進め
まだまだ当分は有給のない試用期間(?)なので、
土日祝に予定を入れまくって、気分転換を図ろうとする昨今。
だんだんと隙間が増えてきたので、もっとがんばろう。
あとそろそろGWの最終決定をしないとなー。
2014年の目標を見直してみて、今のところはイイ感じ。
体力・健康面がもうちょっと足りてないかな。
思わずトレッキングシューズも買ってしまったし、来週末は靴慣らしに行くかー。
シュガーマン 奇跡に愛された男
バーで歌っていたところを発見され、シンガーソングライターとなったロドリゲス。
アメリカでは全くヒットしなかったのに、なぜか南アフリカで大ヒットとなった。
しかし彼の消息を知る人は少なく、自殺説がまことしやかにささやかれていた。
そんなロドリゲスの消息を追ったドキュメンタリー。
長めのインタビューと曲が多いので、眠いときに見ちゃダメ。
ロドリゲスって全然知らなかったけど、実話だからこそおもしろい。
偶然が重なって、ドラマになったのだ。
南アフリカで大ヒットとなったのに、当時南アフリカでそのレコードは売ってなかった。
カセットテープのダビングで大人気になってしまい、レコードの海賊版が売れまくり。
そんなある意味陰の世界でカリスマ的な人気となっていても、遠く離れたアメリカには伝わってこず。
70年代、まだ世界は小さくなかったんだなということが実感できる。
過去をかざすことなどなく、日雇い労働者として細々と生活していたというギャップがイイ。
再発見されてからも、おごることなく変わらない生活をしているのがいい。
トレッキングシューズ
今持ってるトレッキングシューズは8年前くらいに買ったやつ。
モンベルの OutDryアルパインクルーザー2300 Women’s というゴッツイ革靴。
インカトレイルも富士山もこいつで行ったけど、ちょっと大げさすぎるしダサいのが嫌だった。
久々に行った横浜でふらっと寄った好日山荘で、ポイント10%セールをしていた。
クライミングシューズ、バックパック、登山靴など、いろいろ見て回っていたら、店員さん登場。
山は初めてですか?と声をかけられる。
ごっつすぎないトレッキングシューズを見てると話したところ、探してくれる雰囲気。
足の幅が広いってことを話したら、けっこう真剣に探してくれた。
外反母趾だから、足の甲の高さも低いらしい。
で、最初のやつは全然ダメで、次のやつも3Eらしいけど長時間は履けない痛さ。
その次のやつは逆に緩くて、最後のやつがピッタリ。
と、ここまで見てもらって、外反母趾用のソールまで用意してくれて、
こんなにちょうどいいシューズは滅多にないだろうなーと思って、購入を決意。
これかな。
シューズを入れるというバッグもつけてくれた。
色は薦められるままパープルにしたが、紫なら青系も赤系も合うだろうし、まぁよかろう。
ソールもちゃんとサイズを合わせてくれて、付け替えてくれた。
カカトのほうが若干高くなっている。
足にアーチを作るから親指の付け根に痛みが来にくくなるはずとのことだった。
よし、どんどん慣らしていこう。
ボルダリング
久々に横浜のB-PUMP2に行ってきた。
雨の予報だから自転車で品川ロッキー行けないし、あそこ飽きてきたし。
やっぱりPUMP系は難しい課題が多いなぁ。
今は体重が重めなせいもあるかもしれないけど、全然登れなかった。
ピンク→緑→黄色→赤とやりたかったけど、黄色でもう登れず。
前に川崎のPUMPでは赤をやってたはずなんだけど、レベルダウンしてる。
全然腕や指に力が入らなかった。
悔しいのでしばらくこっちにしようかなとも思う。
品川ロッキーに比べると500円高いし電車賃もかかるのであれだけど。
日吉散策
四半期に一度やろうと決まった研究室の同期&先輩との会。
同期の家でやろうという話になったが、近いので日吉&矢上を散策。
ちょうど新入生オリエンテーションの期間だった。
新入生をサークルに勧誘すべく、イベントをやっているのだ。
というわけで、若さに溢れた日吉を散策。
時々雨が降る不安定な天気だったが、しっかり雨対をしてステージもやってた。
テントの位置が昔と違うなーとか、ちょっと懐かしかった。
新しい校舎とかできてるし、ついついキョロキョロしてしまう。
ときどき新入生ですか?と声をかけられるのは、
・とりあえず全員に声をかけてる
・我々が挙動不審なのが新入生っぽい
・格好が学生
だからだろうという結論。
ひようらで懐かしい店を見て回ってランチ。
一度サンティノに行ったら、並んでる人はいなかったのに、店員さんに
「相当空かないです!俺だったら帰ります!」
と言われたのがツボ。
新入生を連れ込んで、だいぶ長話をしているんだと思われ。
結局マリーンでパスタを食べて、それから矢上へ移動。
土曜だというのに、研究室には人がいた。
そして同期さんの家に行って、まったり。
すごいキレイに片付いていて、オシャレだった。
私ももう一度大片付けをして物を減らそう!と思った。
いやー楽しかった。
次回の日程も決めて、楽しみだ。