PHPUnit:测试数据库的问题

时间:2011-04-27 08:29:49

标签: php postgresql phpunit

我是PhpUnit的数据库测试新手。我从简单的测试开始,将PostgreSQL表的内容与xml文件进行比较。

问题是断言不能按预期工作:

请看一下结果:

http://www3.picturepush.com/photo/a/5540556/1024/Anonymous/Screenshot.png

如您所见,表格相同,但db表中的内容(屏幕上的第一个)有一个额外的空格......

我不知道出了什么问题。

这是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

感谢您的任何目标!

1 个答案:

答案 0 :(得分:1)

我认为你可能会使测试过于复杂化。在您的方法中,QueryDataSet和getDataSet可能会以不同的方式将结果呈现为字符串。

您不应该通过反射来测试私有和公共方法,因为这些方法应该是可测试的,并且可以通过公共方法访问。如果他们不能通过公共方法访问,那么他们永远不会被调用。您的代码覆盖率报告在此处派上用场。