log > Unitテスト書いてる
Unitテスト書いてる
CodeceptionでUnitテストを書いてる。
最初はBDDスタイルで書こうとspecifyとverifyを入れて、
private $foo;
//...
$this->specify("hogehoge test", function () {
$this->foo = 'foo';
verify($this->getFoo())->equals('foo');
});
上記のように書いていたのだが、なぜか今日になってテストがフリーズするようになってしまった。原因がわからないままspecifyとverifyを除いたら通るようになった。エラーログにはメモリ枯渇だと書かれていたのでいろいろ調べたら、どちらかに使われているライブラリがdeepcopy失敗していたようだった。
とにかくBDDスタイルだとテストも通らないし困るのでTDDスタイルで書き直した。テストも通るようになった。
スタブはCodeceptionのものを使っていて、今のところ問題はない。が、面倒なことをやるようならMockeryとかAspectMockとか使うと思う。
それにしても、Unitテストを書いてわかったのは、異常系のこと考えてないことと、Testableなコードになってなかったことだ。少なくとも、staticなメソッドの中でインスタンス生成(というかnew)しちゃだめだと思った。テスト書くときにDIするように変えたけど、まだあちらこちらにある。
引き続きユニットテストを書いていきたい。