uopz_set_mock

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

説明

void uopz_set_mock(string $class, mixed $mock)

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

注意:

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

パラメータ

class

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

mock

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

戻り値

値を返しません。

変更履歴

バージョン 説明
PECL uopz 6.0.0 static なメンバは、この関数でサポートされなくなりました。 uopz_redefineuopz_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_get_mock
  • uopz_unset_mock