assertInstanceOfが使えない!?どーすれば・・・


概要

PHPもPHPUnitもバージョンが古くてassertInstanceOfがそもそも使えない。
テストどーするよ・・・?となった時のためのTips。

そもそもassertInstanceOf使って何したいんだっけ?

返ってくる値がそもそもちゃんと正しいクラスオブジェクトかどうかを確かめたかった。
今回の私の場合でいうと、以下のようなメソッドのテストを書きたかった。
ただそれだけ・・・。

sample.php
<?php

class SampleClass
{
    protected function sampleMehthod ($args) {
        switch($args) {
            case '1':
                ~ => なんかクラスオブジェクトが返ってくるよ例えば case1objectとか
            case '2':
                ~
            ・・・
    }
}

そもそもこれが綺麗じゃないとかそれはおいておくとして・・・
書かねばいかんのだ。

assertInstanceOf を assertEqualsで置き換えてみる

これが本質的なアプローチではないかも。
もちろん古いのでReflectionを使ったprotectedのアプローチは使えません・・・
そのため、dummyObjectをかませつつ、sampleMethodを呼んだ上で、assertEqualsを使う。
結局以下のような感じに。

testsample.php
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から使用可能。それより前のバージョンは・・・。

testsample2.php
・・・
       $this->assertTrue($sample_object instanceof SampleClass) 
・・・