【发布时间】:2011-11-16 14:23:24
【问题描述】:
我的网站将有一个高级搜索。人们可以去那里搜索一个实体(例如汽车)。我创建了一些基于搜索参数检查结果数量的测试。我想我应该写什么测试,然后我写它,然后我将数据添加到测试数据库中。但问题来了。当我将新值插入数据库时,我的旧测试会中断。那是因为我正在检查记录的数量...
<?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);
}
}
?>
正常吗?当我创建新测试时,我的旧测试是否应该中断?
我的测试应该绑定到数据吗?
我的搜索有太多参数,它们将在相同的形式(视图)中使用。我应该为每个参数创建测试还是应该一起测试?我应该把它分成更多的测试类吗?
谢谢。
【问题讨论】:
-
好问题,但也许它更适合programmers.stackexchange.com。
标签: php testing tdd phpunit redgreen