Я пытаюсь протестировать вспомогательную функцию, которая использует некоторый экземпляр Form
, абстрактный класс с одним абстрактным методом, process
(который на самом деле не вызывается из протестированной функции).
function get_field_class(Form $form, $field) {
return $form->get_errors_for($field) ? 'error' : '';
}
У меня такой вопрос, как мне высмеять абстрактный класс Form
, чтобы он принимался аннотацией типа get_field_class
?
Я пытался передатьНепосредственно макетный экземпляр:
$form = $this->getMockForAbstractClass(Form::class)
->method('process')
->will($this->returnValue(true));
$this->assertEquals('error', $this->wrapper->get_field_class($form, 'foo'));
Это выдает ошибку типа: Аргумент 1 ... должен быть экземпляром формы, экземпляром PHPUnit \ Framework \ MockObject \ Builder \ InvocationMocker, заданным
Я попытался установить имя ложного класса явно:
$form = $this->getMockBuilder(Form::class)
->setMockClassName(Form::class)
->getMockForAbstractClass(Form::class)
// ...
Это выдает предупреждение Класс "Форма" уже существует .(Предупреждения приводятся к исключениям или ошибкам в моей конфигурации, поэтому это не приемлемые решения.)
Я пытался отключить автозагрузку (возможно, phpunit по какой-то причине с нетерпением загружает класс Form ??):
$form = $this->getMockBuilder(Form::class)
->disableAutoload()
->setMockClassName(Form::class)
->getMockForAbstractClass(Form::class)
// ...
Это просто выдает предупреждение: Класс "Форма" не существует.