私のウェブサイトには高度な検索があります。人々はそこに行き、エンティティー (例えば車) について検索することができます。検索パラメーターに基づいて結果の数をチェックするいくつかのテストを作成しました。どのテストを書くべきかを考え、それを書き、テスト データベースにデータを追加します。しかし、ここで問題が発生します。データベースに新しい値を挿入すると、古いテストが壊れます。それは、レコード数をチェックしているからです...
<?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);
}
}
?>
それは正常ですか?新しいテストを作成すると、古いテストが壊れる必要がありますか?
テストをデータにバインドする必要がありますか?
検索のパラメーターが多すぎるため、同じフォーム (ビュー) で使用されます。各パラメーターを検索するテストを作成する必要がありますか、それとも一緒にテストする必要がありますか? もっと多くのテストクラスに分割する必要がありますか?
ありがとう。