« uopz_set_hook
uopz_set_property »

uopz_set_mock

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

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

説明

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

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

注意:

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

パラメータ

class

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

mock

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

戻り値

値を返しません。

変更履歴

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

例

例1 uopz_set_mock() の例

<?php
class A {
    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 A {
    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 A {
    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::CON, PHP_EOL;
A::who();
?>

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

A
A

Output of the above example in uopz 5:

mockA
mockA

参考

関連キーワード:
uopz   mock   mockA   モック   static   メンバ   サポート   hook   property   Uopz   mixed   インスタンス   プロパティ   オリジナル   代替   修飾   マジック   定数   推奨   履歴   redefine   return   Componere   Output   above
関連する関数・ページ:
function.uopz-get-mock   function.uopz-unset-mock   ref.uopz   book.uopz   function.uopz-get-static   function.uopz-set-static