私のウェブサイトには高度な検索機能があります。 Pleopleはそこに行ってentitiy(例えば、車)を検索することができます。私は検索パラメータに基づいて結果の数を確認するいくつかのテストを作成しました。私はどのようなテストを書くべきかを考え、それを書いてから、テスト・データベースにデータを追加します。しかし、ここで問題が起こる。新しい値をデータベースに挿入すると、古いテストが中断します。これは、レコード数を確認しているからです...TDD:検索をテストするには?
<?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);
}
}
?>
これは正常ですか?新しいテストを作成するときに古いテストを中断する必要がありますか?
テストはデータにバインドする必要がありますか?
検索条件が多すぎるため、同じフォーム(ビュー)で使用されます。各パラメータを検索するテストを作成するか、それらを一緒にテストする必要がありますか?私はもっと多くのテストクラスでそれを分割すべきでしょうか?
ありがとうございました。
良い質問ですが、おそらくhttp://programmers.stackexchange.comに適しています。 – Maxpm