TDD: Как проверить поиск?

Мой сайт будет продвинутый поиск. Плеоны могут пойти туда и набрать о antitify (например, автомобили). Я создал некоторые тесты, которые проверяют количество результатов, основанных на параметрах поиска. Я думаю о том, какие тесты я должен писать, то я пишу, тогда я добавляю данные в тестовую базу данных. Но вот приходит вопрос. Когда я вставляю новые значения в базу данных, мои старые тесты перерываются. Это потому, что я проверяю количество записей ...

<?php defined('SYSPATH') or die('No direct access allowed!');

class Search_Test extends PHPUnit_Extensions_Database_TestCase
{
    /**
     * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
     */
    public function getConnection()
    {
        $pdo = new PDO('mysql:dbname=db_test;host=127.0.0.1', 'root', null);
        return $this->createDefaultDBConnection($pdo, 'db_test');
    }

    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet()
    {
        $fixture = realpath(dirname(__FILE__).'/../data/fixture.xml');
        return $this->createXMLDataSet($fixture);
    }

    public function numberOfResultsDataProvider()
    {
        return array(
            array(1, null, null, 1),
            array(2, null, null, 3),
            array(3, null, null, 0),
            array('abc', null, null, 5),
            array(null, 1996, 2003, 3),
            array(null, 1996, 1999, 2),
            array(null, 2002, 2003, 1),
            array(null, 1500, 1800, 0),
            array(null, 2003, 2003, 1),
            array(null, null, 2005, 4),
            array(null, 1996, null, 4),
            array(null, null, null, 4),
            array(null, 2003, 1996, 0),
            array(null, 'abc', 2003, 4),
            array(null, '1996', '1999', 2),
            array(2, 2003, 2005, 2),
            array(null, null, null, 4),
        );
    }

    /**
     * @dataProvider numberOfResultsDataProvider
     */
    public function testNumberOfResults($brandId, $startYear, 
        $endYear, $numberOfResults
    ) {
        $search = ORM::factory('search');
        $search->setBrand($brandId)
            ->setYearRange($startYear, $endYear);
        $results = $search->results();
        $this->assertEquals($results->count(), $numberOfResults);
    }
}
?>

Это нормально? Если мои старые тесты разрываются, когда я создаю новые тесты?

Если мои тесты будут ограничены данными?

Мой поиск имеет слишком много параметров, и они будут использоваться в одной и той же форме (вид). Должен ли я создать тесты поиска каждого параметра или я должен проверить их вместе? Должен ли я разложить его в более тестовых классах?

Спасибо.

8
задан thom 14 September 2011 в 12:26
поделиться