PHP Conference Japan 2024

uopz_set_mock

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

uopz_set_mock使用 mock 取代類別來建立新物件

說明

uopz_set_mock(字串 $class, 混合 $mock):

如果 mock 是一個包含類別名稱的字串,則會實例化它而不是 classmock 也可以是一個物件。

注意:

只有對屬性和方法的動態存取才會使用 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

參見

新增註釋

使用者提供的註釋

此頁面沒有使用者提供的註釋。
To Top