Я пытаюсь написать модульный тест, который включает в себя макетирование класса, конструктор которого вызывает несколько открытых методов.Указанные публичные методы не могут быть сделаны приватными, по крайней мере, на данный момент.В этом же классе есть магические методы, которые я хочу оставить без изменений (__get / __ set / __ isset), поэтому я прибег к использованию enableProxyingToOriginalMethods()
- я не нашел способа включить только эти три исходных метода (источник здесь: PHPUnit - вызов родительского __get / __set / __ isset ).Это заставляет магические методы работать, но это ломает конструктор.
Следующий код демонстрирует проблему:
<?php
use PHPUnit\Framework\TestCase;
class ExceptionTestCase extends TestCase
{
public function testException()
{
$this->expectException(TypeError::class);
$this->expectExceptionMessage('call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object');
$this->getMockBuilder(Foo::class)
->enableProxyingToOriginalMethods()
->getMock();
}
}
class Foo
{
public function __construct()
{
$this->setBar();
}
public function setBar()
{
}
}
Я ожидал бы, что это просто сработает, поскольку абсолютно ничего изобычный здесь, и все же он ломается без видимой причины.Если видимость публичного метода установлена на частный, тогда он работает, как и ожидалось, но я не могу сделать это в реальном коде.
Как исправить эту ошибку, не касаясь упомянутых публичных методов?Я пропустил некоторые настройки MockBuilder?