我的網站將有一個高級搜索。 Pleople可以去那裏搜索一個實體(例如汽車)。我創建了一些基於搜索參數檢查結果數量的測試。我想我應該寫什麼測試,然後編寫它,然後將數據添加到測試數據庫。但問題來了。當我向數據庫中插入新的值時,舊的測試會中斷。這是因爲我正在檢查記錄數...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