(PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_set_mock — 新しいオブジェクトを生成する際に、クラスの代わりにモックを使う
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 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