我是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.phprequire_once '../vendor/autoload.php';
答案 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
。