Тест PHPUnit с использованием насмешек не может перехватить вызов метода издеваемого классаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Тест PHPUnit с использованием насмешек не может перехватить вызов метода издеваемого класса

Сообщение Anonymous »

Вот мой тест PHPUnit (PHPUnit 10.5.2 Mockery 1.6.11)

Код: Выделить всё

    public function testMergedDocumentsWithSuccessfulInit() {
$params = new \Buan\Request\Parameters([], [], [], []);
$mockAdminView = m::mock(AdminView::class);

// The mocking of init method will consider the inheritance from Ias\AdminController.
$controller = m::mock('DocumentsController', [$params])
->makePartial()
->shouldAllowMockingProtectedMethods();

// Mock the 'init' method which is inherited from Ias\AdminController
$controller->shouldReceive('init')
->with($mockAdminView)
->andReturn(true)
->once(); // Ensure the init method is mocked to return true once

echo "Mock setup complete, testing init call\n";
$initResult = $controller->init($mockAdminView); // This should print true as the init method is mocked
echo "init called, result: " . ($initResult ? "true" : "false") . "\n";

// Execute the mergedDocuments method and check the result
$result = $controller->mergedDocuments();
Это начало метода, который я тестирую на своем DocumentsController:

Код: Выделить всё

    public function mergedDocuments(): AdminView
{
// Init
$view = new AdminView();
$initResult = $this->init($view);
if (!$initResult) {
return $view;
}
Метод init определен в AdminController, который расширяет DeveloperController, например

Код: Выделить всё

class DocumentsController extends Ias\AdminController
DocumentsController находится в глобальном пространстве имен, а AdminController — в Ias (не уверен, что это актуально).
Что бы я ни делал установите для "->andReturn(...)" значение, возвращаемый $view всегда достигается, т.е. метод 'init' не перехватывается и работает как обычно, всегда возвращая false.

Код: Выделить всё

protected function init(AdminView $view, bool $bypassAuthCheck = false): bool
Мой вопрос: почему метод init не перехватывается?
Я ожидал, установив для параметра andReturn значение false что ранний возврат не будет достигнут в моем методе mergeDocuments.

Подробнее здесь: https://stackoverflow.com/questions/784 ... mocked-cla
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»