雑文発散

«前の日記(2015-07-12) 最新 次の日記(2015-07-14)» 編集
過去の日記

2015-07-13 [長年日記]

[Java] Mockito を使って Mock を利用したテストを書いてみたら、また PHP と Java の関係性に意識が行った

Java で「現在年」が関係するクラスを書いていて、そのテストをどうやればいいかな?と思って調べていた。何も考えないで作っちゃうと「来年になったらテストがコケる」というアレを回避するヤツ。

実験的にクラスを作っていたときには Calerdar インスタンスをクラス内で生成していたけど、Calendar インスタンスの setter を用意してして、外部から注入可能なようにした。テスト時には、この setter を使って Mock を差し込めば良いはずだと考えて。

setter に思いを馳せていたときには、まだ Mock に何を使えばいいのか分からなかったのだが、検索してみると Mockito の名前をよく見かけた。更にそれを調査してみたら、なんか見たことのあるメソッド名が並んでいたので「おおっ!?」となった。

PHP では、Mock ライブラリに Phake をつかっているのだけど、Mockito はそれにそっくり。もう、少し調べてみると、その関係性は逆で、Phake のほうが Mockito の影響を受けて作られていたのだと分かった。

並べてみるとこんな感じ(動かしてない)。 FooClass は別途どこかで import / use しているクラスだと思って読んでね。

  • Java / Mockito
import static org.mockito.Mockito;

FooClass mockedFoo = Mockito.mock(FooClass.class);
Mockito.when(mockedFoo.getValue()).thenReturn("dummyValue");
  • PHP / Phake
use \Phake;

$mockedFoo = Phake::mock(FooClass::class);
Phake::when($mockedFoo)->getValue()->thenReturn('dummyValue');

先日の日記に書いた「イマドキの PHP を書いていれば Java は比較的理解しやすいんだなぁと、いまさらながら思っている」という思いの要因が、またひとつ増えた気がする。

さて、もうちょっとテストを書かねば。境界値あたりのパターンを書いてなかったことを思い出してしまった。