PHPUnit测试错误,找不到类

时间:2017-01-23 22:03:09

标签: php unit-testing phpunit phpstorm autoload

我是PHPUnit和单元测试的新手,所以我通过作曲家安装了PHPUnit和phar,一切都很顺利,直到我尝试开始我的简单测试。我使用PhpStorm,我可以看到所有类都是自动加载,但是当我尝试开始测试时出现错误:

Fatal error: Class 'PharIo\Manifest\Simple' not found in C:\xampp\htdocs\mydocs\

我不明白他为什么要在文件夹中找到它而不是PHPUnit存在?

我试图在composer.json中配置autoload部分并检查phpunit.xml中的设置但是没有任何作用。

添加

我必须在没有PharIO的情况下重新安装PHPUnit,所以现在我有一些进步,现在我有一种情况,如果我使用被测试类名称的require_once行,我可以测试我的类。它看起来像:

require_once '../src/Simple.php';

class SimpleTest extends PHPUnit_Framework_TestCase
{

    public function testAdd() {

        $sum = new Simple();

        $this->assertEquals(5, $sum->add(2, 3));

    }

}

所以我的简单课程是:

class Simple {

public function add($a, $b) {

    return (int) $a + (int) $b;

}

}

但是,当然,我想使用名称空间。我尝试根据这个问题进行一些更改:Autoloading classes in PHPUnit using Composer and autoload.php(我甚至尝试使用该repo进行测试,但仍然存在错误)但是对我来说没有任何作用。我试着像这样编辑composer.json中的自动加载部分

"autoload": {
    "psr-4": {
        "app\\": "src/"
    }

},

但是仍然存在错误,另一个词是自动加载无法看到它。我用相同的设置创建了phpunit.xml和phpunit.dist.xml

<phpunit
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
        backupGlobals="true"
        backupStaticAttributes="false"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        processIsolation="false"
        stopOnFailure="false"
        syntaxCheck="false"
        bootstrap="./tests/bootstrap.php">

        <testsuites>
                <testsuite name="The project's test suite">
                        <directory>./tests</directory>
                </testsuite>
        </testsuites>
</phpunit>

我用

做了test / bootstrap.php
require_once '../vendor/autoload.php';

3 个答案:

答案 0 :(得分:1)

您应该使用自动加载类指定脚本。

您可以在XML-file中指定自动加载文件,如另一个答案所示,或者只是在命令中指定--bootstrap option来运行测试:

phpunit --bootstrap vendor/autoload.php tests

答案 1 :(得分:1)

我知道这是一个老问题,但也许您需要做

composer dump-autoload,供作曲者生成类图。

我浪费了30分钟,试图了解PHPUnit为什么给我:

Cannot stub or mock class or interface XXX because it doesn't exists

答案 2 :(得分:0)

Composer的自动加载依赖于位于vendor/autoload.php文件中的配置,该文件需要在执行线程中的某个位置加载。您的应用程序已包含此及其原因,但测试使用不同的入口点,因此您需要使用名为phpunit.xml.dist的文件对其进行配置。

假设您的文件结构类似于:

app/
src/
tests/
  bootstrap.php <- create it in your test folder
vendor/
...
composer.json
composer.lock
phpunit.xml.dist <- create it if does not exist

您可以看到各种选项here,但对于基本配置,您可以使用此选项。

档案phpunit.dist.xml

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
    backupGlobals="true"
    backupStaticAttributes="false"
    bootstrap="tests/bootstrap.php">
</phpunit>

档案tests/bootstrap.php

require_once '../vendor/autoload.php';

您应该从根目录运行phpunit