(PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_set_mock — 使用 mock 取代類別來建立新物件
如果 mock
是一個包含類別名稱的字串,則會實例化它而不是 class
。mock
也可以是一個物件。
注意:
只有對屬性和方法的動態存取才會使用
mock
物件。靜態存取仍然使用原始的class
。請參閱下面的範例。
class
要被 mock 的類別名稱。
mock
要使用的 Mock,以字串形式表示,包含要使用的類別名稱或物件。如果傳遞字串,則必須是完整的類別名稱。建議在此情況下使用 `::class
` 魔術常數。
無回傳值。
版本 | 說明 |
---|---|
PECL uopz 6.0.0 | 此函式不再支援 Mock 靜態成員。可以使用 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() 與靜態成員
從 uopz 6.0.0 開始,不再支援 Mock 靜態成員。
<?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
上述範例在 uopz 5 中的輸出
mockA mockA