Исходный код:
class Constant {
public function abspath() {
return ABSPATH;
}
}
Для тестирования необходимо немного изменить код. Константы необходимо получать через функцию constant
:
class Constant {
public function abspath() {
return constant( 'ABSPATH' );
}
}
Для тестирования используем библиотеку lucatume/function-mocker
. Установим ее через composer:
composer require lucatume/function-mocker
В файле bootstrap.php инициализируем FunctionMocker
:
use tadFunctionMockerFunctionMocker;
require_once 'path/to/vendor/autoload.php';
FunctionMocker::init(
[
'whitelist' => [
realpath( 'path/to/root/of/the/project/' ),
],
'redefinable-internals' => [ 'constant' ],
]
);
В тестовом классе нужно обновить фикстуры setUp
и tearDown
, заменить функцию constant
и убедиться, что данная функция вызвана правильно:
use tadFunctionMockerFunctionMocker;
use PHPUnitFrameworkTestCase;
class Test_Constant extends TestCase {
public function setUp(): void {
FunctionMocker::setUp();
parent::setUp();
}
public function tearDown(): void {
parent::tearDown();
FunctionMocker::tearDown();
}
public function test_abspath() {
$abspath = '/abspath/';
$mock_constant = FunctionMocker::replace( 'constant', $abspath );
$constant = new Constant();
$this->assertSame( $abspath, $constant->abspath() );
$mock_constant->wasCalledWithOnce( [ 'ABSPATH' ] );
}
}