2011-04-27 90 views
1

我是使用PhpUnit进行数据库测试的新手。我从简单的测试开始,将PostgreSQL表格的内容与xml文件进行比较。PHPUnit:与测试数据库有关的问题

的问题是预期这种说法不工作:

请看看结果:

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

感谢您的任何目标!

+2

该票已重新编辑,我已添加了代码。请重新打开这个问题。感谢有关SO的帮助和目标。 – 2011-04-27 09:33:52

+0

字符列(而不是varchar)是否搞乱了所有东西? – 2011-05-20 08:11:41

回答

1

我想你可能是在测试复杂化。在你的方法中,QueryDataSet和getDataSet可能会呈现不同的字符串。

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

+0

嗨, 恕我直言,这是测试private和protected方法正确: http://sebastian-bergmann.de/archives/881-Testing-Your-Privates.html 您的建议结果将是很好的代码覆盖率但不是真正的单元测试。 另一件事是我回答了db测试的问题,而不是关于测试私有或受保护方法的意义/问题。 汤姆 – 2011-05-31 13:37:24

+0

其实,如果你看过接近底部的段落,他解释说他的测试私有/保护的方法和属性“在大多数情况下,你应该能够通过行使其公共的方法来测试一个类的立场。如果有重要的功能隐藏在私有或受保护的访问之后,这可能是一个警告信号,表明还有另一个类正在努力脱离“和......”所以:仅仅因为受保护和私有属性和方法的测试可能不会这意味着这是一件“好事”。“ – Kevin 2011-06-03 16:16:02