assertInstanceOfが使えない!?どーすれば・・・
概要
PHPもPHPUnitもバージョンが古くてassertInstanceOfがそもそも使えない。
テストどーするよ・・・?となった時のためのTips。
そもそもassertInstanceOf使って何したいんだっけ?
返ってくる値がそもそもちゃんと正しいクラスオブジェクトかどうかを確かめたかった。
今回の私の場合でいうと、以下のようなメソッドのテストを書きたかった。
ただそれだけ・・・。
<?php
class SampleClass
{
protected function sampleMehthod ($args) {
switch($args) {
case '1':
~ => なんかクラスオブジェクトが返ってくるよ?例えば case1objectとか
case '2':
~
・・・
}
}
そもそもこれが綺麗じゃないとかそれはおいておくとして・・・
書かねばいかんのだ。
assertInstanceOf を assertEqualsで置き換えてみる
これが本質的なアプローチではないかも。
もちろん古いのでReflectionを使ったprotectedのアプローチは使えません・・・
そのため、dummyObjectをかませつつ、sampleMethodを呼んだ上で、assertEqualsを使う。
結局以下のような感じに。
require_once 'sample.php'
class dummyClass extend SampleClass
{
~値をセットしたりとかのメソッドを書いておく~
}
class test
{
public function testSampleMehthod {
$dummy = new dummyClass();
$sample_object = $dummy->sampleMethod($args);
$this->assertEquals(
get_class(--期待する該当クラスのオブジェクト--),
get_class($sample_object)
);
}
}
何か他に良い施策をお持ちの方。教えていただけると嬉しいです。
他の方法として(追記)
@ysKuga さんに教えていただいた方法。
assertEqualsではなく、assertTrue(場合によってはassertFalse)とinstanceofを使って判定を行う。testsample.phpの「$this->assertEquals」を以下のように置き換えて使用する。PHP5から使用可能。それより前のバージョンは・・・。
・・・
$this->assertTrue($sample_object instanceof SampleClass)
・・・
Author And Source
この問題について(assertInstanceOfが使えない!?どーすれば・・・), 我々は、より多くの情報をここで見つけました https://qiita.com/SuguruOoki/items/f84fc2fe11573f565585著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .