【问题标题】:Database test faillure with dbUnit使用 dbUnit 的数据库测试失败
【发布时间】:2016-09-04 13:28:36
【问题描述】:

我正在尝试使用 php 单元执行一些数据库测试,但我不断收到以下错误:

我的 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 自动加载器来加载主要的 php 类,如下所示:

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

在我看来,奇怪的是常规的 phpunit 测试确实运行,但 dbUnit 测试却没有。我尝试了从packagist下载的composer,phpUnit和dbUnit的几次升级,但没有成功。

如果你能帮助我,那就太好了, 提前致谢。

【问题讨论】:

    标签: php phpunit composer-php dbunit php-5.4


    【解决方案1】:

    当您运行composer install 时,composer 会生成文件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'; 和 composers vendor/autoload.php 放在这里,这样你就可以运行类似的测试

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

    无需在每个测试文件中插入require_once 'autoload.php';

    【讨论】:

    • 您好,感谢您的回答。当我确实像你说的那样需要 vendor/autoload.php 时,我收到以下错误:Argument #3 of &lt;no value&gt; of phpunit_textUI_resultprinter::construct--() must be a value from "never", "auto" or "always" 我搜索了这个错误并将 phpunit 从 require-dev 移动到 dev。可惜没有结果。我现在运行 phpunit 5.3.2。你有什么想法吗?谢谢!
    • 您运行的是vendor/bin/phpunit 还是您的系统范围内安装的版本?不幸的是,除了猜测之外,第一个观点没有任何想法。也许它值得在这个网站上提出另一个问题
    • 是的。嗯,太糟糕了...我真的很喜欢测试驱动开发的想法,但直到没有让它工作很痛苦:P 感谢您的帮助,我会提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2011-02-21
    • 2018-08-20
    • 2022-07-25
    • 2021-04-10
    • 2012-04-20
    相关资源
    最近更新 更多