понедельник, 21 апреля 2014 г.

Entity Provider и PHPUnit

6 задание по курсу "Информатика и программирование" на весенний семестр 2013-2014 года

В рамках этого задания необходимо реализовать несоклько классов и написать unit-тесты.

Классы

DB

В 5 задании вы реализовали DB класс, выполняющий 5 методов, работающих с базой данных напрямую. Ставится задача абстрагировать ее от непосредственного взаимодействия с БД, добавив посредника - PDO:
  • В конструктор DB передаем полностью сконфигурированные экземпляр PDO
  • Удаляем метод execQuery
  • Все остальные методы переписываем так, чтобы непосредственные запросы к БД производились в PDO

Entity

Класс нашей сущности. Под сущность подразумевается контейнер данных для 1 строчки из БД. Например, если мы рассматриваем таблицу со студентами. То 1 строчка из такой таблицы - студент. И если мы обернем все данные этой строчки в некоторый класс, то получим класс сущности "Студент".
Предположим, в таблице стдентов 4 поля: ID, fio, gender, group
У нас есть 1 строка из этой таблицы. Например, в ассоциативном массиве:
$data = array('ID' => 1, 'fio' => 'Test test test', 'gender' => 1, 'group' => '246'); 
Создаем класс Student, в конструктор которого передаем данные из этой строки:
function __construct($id, $fio, $gender, $group) {}
...
$student = new Student($data['ID'], $data['fio'],...); // Создание экземпляра выглядит так
Так же в этом классе объявляем приватные свойства для каждого поля соответственно. И присваиваем значения аргументов конструктора этим полям:
private $ID;
private $fio;
...
function __construct($id, $fio, $gender, $group) {
    $this->ID = $id;
    $this->fio = $fio;
...
}
Так же для каждого приватного свойства должен быть описан свой метод "геттер", именованный, как getFileldName, например, дляч fio - это getFio(). Каждый такой метод просто возвращает значение соответствуюещго поля.

Provider

Класс-поставщик сущностей. Провайдер в качестве аргумента конструктора принимает экземпляр DB класса.
Имеет три метода: 
  1. getEntities();
  2. getEntity($number)
  3. saveEntity(Entity $entity)
Каждый из этих метов внутри себя вызывает похожий метод у DB класса. Но. В случае с get-методами, результат представляет из себя не просто строку (или массив строк) из БД, а класс сущности (или список сущностей)
Так, метод getEntities вернет массив, каждый эелемент которго - это экземпляр класса Entity с переданными в него данными из полученной строки БД.
А в случае с saveEntity, внутри метода будет сформирован массив, который будет передан в метод DB setData.

Тестирование

Необходимо покрыть unit-тестами классы Provider и DB. Причем, для провайдера предусмотреть два тестовых класса: в одном DB класс представлен стабовым классом, в другом - через mock.
DB класс тестируется 1 тестовым классом, в котором строится mock для PDO.

Примечание

Имена классов Entity и Provider - даны для примера. В вашем случае они будут иметь конкретные имена. Например, Student и StudentsProvider.

Комментариев нет:

Отправить комментарий