2016-05-09 30 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感谢您的帮助,我会打开另一个问题。 –