Я пытаюсь проверить, вызван ли защищенный метод в открытом интерфейсе.Тестирование, если был вызван защищенный метод
<?php
abstract class SomeClassAbstract
{
abstract public foo();
public function doStuff()
{
$this->_protectedMethod();
}
protected function _protectedMethod();
{
// implementation is irrelevant
}
}
<?php
class MyTest extends PHPUnit_Framework_TestCase
{
public function testCalled()
{
$mock = $this->getMockForAbstractClass('SomeClass');
$mock->expects($this->once())
->method('_protectedMethod');
$mock->doStuff();
}
}
Я знаю, что это называется правильно, но PHPUnit говорит, что его никогда не называли.
То же самое происходит, когда я проверяю другой путь, когда метод никогда называется:
<?php
abstract class AnotherClassAbstract
{
abstract public foo();
public function doAnotherStuff()
{
$this->_loadCache();
}
protected function _loadCache();
{
// implementation is irrelevant
}
}
<?php
class MyTest extends PHPUnit_Framework_TestCase
{
public function testCalled()
{
$mock = $this->getMockForAbstractClass('AnotherClass');
$mock->expects($this->once())
->method('_loadCache');
$mock->doAnotherStuff();
}
}
Метод называется, но PHPUnit говорит, что это не так.
Что я делаю неправильно?
Редактировать Я wasn't объявляя свои методы с двойным двоеточием, это было только для обозначения, что это был публичный метод (интерфейс). Обновлено до полного объявления классов/методов.
Edit 2 Я должен сказать, что I'm тестирования некоторых реализаций метода в абстрактном классе (отредактированный код, чтобы отразить это). Поскольку я не могу создать экземпляр класса, как я могу проверить это?
Я размышляю над созданием SomeClassSimple
, распространяя SomeClassAbstract
и тестируя это вместо этого. Правильно ли это?
Спасибо вам Ewan, вы правы.Конечно, если его макетный объект, у него нет реализации метода. Как тупой я. Я буду отмечать ваш ответ как правильный. Если вы можете, пожалуйста, посмотрите мое второе редактирование. –
Так что я пытаюсь проверить - это реализация, а не поведение, верно? Это немного более ясно для меня, спасибо. –
Модульное тестирование, я думаю, больше искусства, чем кажется. Я высоко оценил это после прочтения тестовых шаблонов xUnit: рефакторинг тестового кода Жерара Мезароса. В свою очередь, книга была сильной рекомендацией Себастьяна Бергмана, автора PHPUnit. –