Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual/CommonTasks/Testing/TestingModels ...

Тестирование моделей

Создание тестовой оболочки


Допустим, у нас уже есть модель Article, определенная в app/models/article.php, которая выглядит так:


<?php  
   
class Article extends AppModel 
          var 
$name 'Article'
           
          function 
published($fields null) { 
              
$conditions = array( 
                  
$this->name '.published' => 
              
); 
               
              return 
$this->findAll($conditions$fields); 
          } 
   
   } 
 
?>


Сейчас мы хотим подготовить тест, который будет использовать определение этой модели, и с помощью прикреплений протестирует некоторую функциональность в модели. Тестовый пакет CakePHP подгружает минимум файлов. Мы должны начать с загрузки нашей родительской модели (в данном случае – модель Article, которую мы уже определили), и затем информировать тестовый комплекс о том, что мы хотим протестировать эту модель, определив какую конфигурацию базы данных он должен использовать. Тестовый комплекс CakePHP имеет конфигурацию базы данных test_suite, которая используется для всех моделей, указанных в прикриплениях. Установка $useDbConfig в эту конфигурацию позволит знать тестовой программе, что эта модель исползует конфигурацию базы данных тестового комплекса.


Поскольку мы также хотим использовать весь существующий код нашей модели, то мы создадим тестовую модель на основе модели Article, установим $useDbConfig и $name. Давайте сейчас создадим файл article.test.php в каталоге app/tests/cases/models со следующим содержимым:


<?php  
   App
::import('Model','Article'); 

   
   class 
ArticleTestCase extends CakeTestCase 
          var 
$fixtures = array( 'app.article' ); 
   } 
 
?>


Мы создали ArticleTestCase. В переменной $fixtures мы определили прикрепление, которое будем использовать.


Замечание: Если ваша модель ассоциирована с другими моделями, то вы должны включить все прикрепления для каждой ассоциированной модели, даже, если вы не используете их. Например: A hasMany B hasMany C hasMany D. В ATestCase вы должны включить прикрепления для a, b, c и d.



Создание тестового метода


Давайте добавим метод для тестирования функции published() модели Article. Отредактируйте файл app/tests/cases/models/article.test.php следующим образом:


<?php
    App
::import('Model''Article');
    
    class 
ArticleTestCase extends CakeTestCase {
        var 
$fixtures = array( 'app.article' );
    
        function 
testPublished() {
            
$this->Article =& ClassRegistry::init('Article');
    
            
$result $this->Article->published(array('id''title'));
            
$expected = array(
                array(
'Article' => array( 'id' => 1'title' => 'First Article' )),
                array(
'Article' => array( 'id' => 2'title' => 'Second Article' )),
                array(
'Article' => array( 'id' => 3'title' => 'Third Article' ))
            );
    
            
$this->assertEqual($result$expected);
        }
    }
    
?>


Мы добавили метод testPublished(). Начинается он с создания экземпляра нашего прикрепления, основанного на модели Article, и затем вызывается метод published(). В $expected мы установили ожидаемый результат (это мы знаем, поскольку определили какие записи будут изначально добавлены в таблицу). Соответствие результата и ожидаемого результата мы проверяем с помощью метода assertEqual. Как запустить тест смотрите выше в статье Создание тестов.


<< Создание тестов | Тестирование контроллеров >>


 
Комментарии
Ошибка в слове «исползует»
borodatyuk7.tenet.odessa.ua (2011-01-10 16:57:50)
зачем нужно такое странное тестирование?
178.44.196.118 (2011-09-20 00:59:29)
Добавить комментарий:

Файлы [Скрыть файлы/форму]