Для вас предусмотрена база ControllerTestCase
, поскольку для настройки и демонтажа среды для тестирования контроллера требуются сложные шаги. Входные данные представляют собой фиктивный HTTP-запрос, а выходные данные представляют собой HTML-код, который необходимо очистить для поиска ожидаемого содержимого.
Модель больше похожа на обычный старый объект PHP. Там меньше среды для настройки. Интерфейс - это просто вызов метода для объекта.
Итак, я бы запустил класс TestCase
, который расширяет простое TestCase
в PHPUnit, и начал бы с добавления хотя бы одного метода test
(в виде пустой функции ) для каждого метода в вашем классе Model , В конечном итоге у вас будет много методов тестирования для каждого метода в вашем классе Model, но создание пустых методов тестирования - это хороший способ не забыть некоторые из ваших методов Model.
Обратите внимание, что модель не является таблицей - модель обычно использует один или несколько объектов таблицы. Следуя этой схеме, у вас есть возможность создать макетные объекты для таблиц, чтобы вы могли запускать набор тестов, не требуя прямого подключения к базе данных.
Вот пример настройки фиктивного объекта Table, который жестко запрограммирован для возврата синтетического набора данных вместо набора данных из базы данных.
<?php
class MyModelTest extends PHPUnit_Framework_TestCase
{
protected $_model;
public function setUp()
{
$foo = $this->getMock('FooTable', array('find'));
$foo->expects($this->any())
->method('find')
->will($this->returnValue(array("id"=>"123")));
$this->_model = new MyModel();
$this->_model->setFooTable($foo);
}
public function testCountElements()
{
$this->_model->get(123);
$n = $this->_model->countElements();
$this->assertEquals(1, $n);
}
public function testAsArray()
{
$this->_model->get(123);
$a = $this->_model->asArray();
$this->assertType('array', $a);
}
public function testAddElement()
{
// ...etc.
}
public function testGetElement()
{
// ...etc.
}
}