我刚开始使用 PhpUnit 进行数据库测试。我从比较 PostgreSQL 表的内容与 xml 文件的简单测试开始。
问题是断言没有按预期工作:
请看结果:
http://www3.picturepush.com/photo/a/5540556/1024/Anonymous/Screenshot.png
如您所见,表是相等的,但数据库表中的内容(屏幕上的第一个)有一个额外的空格...
我不知道哪里出了问题。
这是 PHP 代码:
public function testGetSourceData()
{
include_once(
sfConfig::get('sf_lib_dir')
. '/task/ShopCategoryTreeUpdateTask.class.php'
);
$method = new ReflectionMethod(
'ShopCategoryTreeUpdateTask', '_getSourceData'
);
$method->setAccessible(TRUE);
$res = $method->invoke(new ShopCategoryTreeUpdateTask(new sfEventDispatcher, new sfFormatter),123);
$actual = new PHPUnit_Extensions_Database_DataSet_QueryDataSet($this->getConnection());
$actual->addTable('shop');
$expected = $this->getDataSet();
$this->assertDataSetsEqual(
$actual,
$expected
);
}
这里是 XML: http://pastebin.com/5MmtJDr6
感谢任何目标!
最佳答案
我认为你可能把测试复杂化了。在您的方法中,QueryDataSet 和 getDataSet 可能将结果呈现为不同的字符串。
您实际上不应该通过反射来测试私有(private)和公共(public)方法,因为这些方法应该可以通过您的公共(public)方法进行测试和访问。如果它们不能通过公共(public)方法访问,那么它们将永远无法被调用。您的代码覆盖率报告在这里派上用场。
关于PHPUnit:测试数据库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801297/