uopz_set_mock

(PECL uopz 5, PECL uopz 6, PECL uopz 7)

uopz_set_mock新しいオブジェクトを生成する際に、クラスの代わりにモックを使う

説明

uopz_set_mock(string $class, mixed $mock): void

mock がクラス名を含んだ文字列だった場合、 class の代わりにそれがインスタンス化されます。 mock はオブジェクトであっても構いません。

注意:

プロパティやメソッドに動的にアクセスした場合にだけ、 mock オブジェクトを使います。 静的にアクセスした場合には、オリジナルの class を使います。 後に示す を参照して下さい。

パラメータ

class

モックで代替するクラスの名前

mock

モックとして使うクラス名を含む文字列。またはオブジェクト。 文字列を渡す場合、完全修飾されたクラス名でなければいけません。 この場合、マジック定数 ::class を使うことを推奨します。

戻り値

値を返しません。

変更履歴

バージョン 説明
uopz 6.0.0 static なメンバは、この関数でサポートされなくなりました。 uopz_redefine()uopz_set_return() を使うか、Componere が代わりに使えます。

例1 uopz_set_mock() の例

<?php
class {
    public function 
who() {
        echo 
"A";
    }
}

class 
mockA {
    public function 
who() {
        echo 
"mockA";
    }
}

uopz_set_mock(A::class, mockA::class);
(new 
A)->who();
?>

上の例の出力は以下となります。

mockA

例2 uopz_set_mock() の例

<?php
class {
    public function 
who() {
        echo 
"A";
    }
}

uopz_set_mock(A::class, new class {
                            public function 
who() {
                                echo 
"mockA";
                            }
                        });
(new 
A)->who();
?>

上の例の出力は以下となります。

mockA

例3 uopz_set_mock() と static メンバ

uopz 6.0.0 以降、static なメンバはサポートされなくなりました。

<?php
class {
    const 
CON 'A';
    public static function 
who() {
        echo 
"A";
    }
}

uopz_set_mock(A::class, new class {
                            const 
CON 'mockA';
                            public static function 
who() {
                                echo 
"mockA";
                            }
                        });
echo 
A::CONPHP_EOL;
A::who();
?>

上の例の出力は以下となります。

A
A

Output of the above example in uopz 5:

mockA
mockA

参考

関連キーワード:  uopz, mock, クラス, オブジェクト, モック, 生成, 代わり, mockA, static, 出力