2011-04-27 33 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