2016-05-09 31 views
1

我想用PHP單元執行一些databasetests但我不斷收到以下錯誤: following errors:數據庫測試faillure用DbUnit

我composer.json這個樣子的:

{ 
    "require": { 
    "phpunit/phpunit": "4.8", 
    "phpunit/dbunit": "^2.0" 
} 

這是我試圖執行測試的頁面:

<?php 
require_once 'autoload.php'; 

class testDatabase extends \PHPUnit_Extensions_Database_TestCase { 


public function getConnection() { 
    $db = new PDO(
     "mysql:host=localhost;dbname=mrf", 
     "", ""); 
    return $this->createDefaultDBConnection($db, "bulletproof"); 
} 

} 
?> 

我使用sql autoloader加載主要的php類,它看起來像下面這樣:

<?php 
spl_autoload_register(function($class) { 
    require_once '../classes/' . $class . '.php'; 
}); 
?> 

在我看來,奇怪的是常規的phpunit測試運行,但dbUnit測試沒有。我嘗試了從packagist下載的composer,phpUnit和dbUnit的幾個升級版,但沒有成功。

會很好,如果你能幫助我, 在此先感謝。

回答

1

當您運行composer install時,作曲家生成文件PROJECT_ROOT/vendor/autoload.php。該文件包含了自動加載項目依賴關係所需的全部內容,因此根據我在屏幕截圖中看到的內容,您需要require_once以及您自己的。


補充說明:PHPUnit的有一個選項--bootstrap=filename,所有測試運行之前被執行。您可以運行

phpunit --bootstrap=PROJECT_ROOT/vendor/autoload.php databaseTest.php 

之後,你可以創建類似phpunit_bootstrap.php,把你的require_once 'autoload.php';這裏和作曲家供應商/ autoload.php這樣你就可以像

phpunit --bootstrap=path/to/your/phpunit_bootstrap.php AnythingYouWantToTest.php 

運行測試,而不需要插入require_once 'autoload.php';在每個測試文件中。

+0

嗨,謝謝你的回答。當我喜歡你說,並要求'vendor/autoload.php'時,我得到以下錯誤:'phpunit_textUI_resultprinter :: construct - ()的的參數#3必須是來自「never」,「auto」或「always」'我搜索了這個錯誤,並將phpunit從'require-dev'移到'dev'。很遺憾沒有結果。我現在運行phpunit 5.3.2。你有什麼想法?謝謝! –

+0

您是否運行'vendor/bin/phpunit'或您的系統安裝版本?不幸的是,除了猜測,沒有第一個觀點的想法。也許這個網站 –

+0

是值得的另一個問題是。嗯,壞...我真的很喜歡測試驅動開發的想法,但直到它不是一個痛苦的工作:P感謝您的幫助,我會打開另一個問題。 –