LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-23

概要

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) 
・・・
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1