[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHPUnit - вместо методов мока вызывает реальные
konst_t
Всем привет.

Долго бьюсь с одной проблемой при создании теста. Может кто поопытней подскажет что я не так делаю. Смысл в следующем. Есть несколько связанных классов:

abstract class ApiRequest
{
// объявление переменных

function __construct($profileID = false)
{
echo "Real ApiRequest::__construct" . PHP_EOL;
// какой-то код
return;
}

protected function query($type, $path, $data = null, $task = false, $stop_repeating = null)
{
// какой-то код отправки запроса
}

// другие методы

abstract public function send();

}


class setHidden extends ApiRequest
{

public function send($offers = [])
{
echo "Real setHidden::send" . PHP_EOL;
// какой-то код
return null; //$this->query("POST", $this->url . $path, $data);
}

}



class HS implements TaskInterface
{

public function execute($arTask): void
{
// какой-то код

$o = new setHidden();
$res = $o->send($arBody); var_dump($res);

// какой-то код
}
}


Для класса HS пишу тест:

/**
*
@runInSeparateProcess
* @preserveGlobalState disabled
*/

class HSTest extends BitrixTestCase
{
// объявление переменных

public function setUp(): void
{
parent::setUp();

$this->apiRequestMock = $this->getMockBuilder(\Iplogic\Beru\V2\ApiRequest\setHidden::class)
->
disableOriginalConstructor()
->
getMock();


// какой-то код (другие заглушки)
}


/**
*
@doesNotPerformAssertions
*/
public function testExecute(): void
{
// какой-то код

$this->apiRequestMock->expects($this->once())
->
method('send')
->
with($this->equalTo([
"hiddenOffers" => [
[

"marketSku" => 3,
"comment" => "",
"ttlInHours" => 720,
],
[

"marketSku" => 4,
"comment" => "",
"ttlInHours" => 720,
],
],
]))
->
willReturn(["status" => 200]);


$obj = new HS();
$obj->execute(["ID" => 111]);
}
}


Все заглушки я не привожу, там всё нормально. А вот с методом setHidden::send проблема. Его надо эмулировать, но...

Результат выполнения теста такой:
HSTest
x execute [0.019s]
Real ApiRequest::__construct
Real setHidden::send
NULL


Time: 00:00.229, Memory: 28.00 MB

There was 1 failure:

1) HSTest::testExecute
Expectation failed for method name is "send" when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Script phpunit handling the test event returned with error code 1

То есть выполняются реальные методы вместо заглушек, а метод заглушку он не трогает и считает что он не вызывался.
Пробовал частичный мок - то же самое.
Что делаю не так?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.