我正在试图找出phpunit,但是当我尝试在tesfile中实例化一个对象时,我一直收到以下错误:
Fatal error: Class stats\Baseball not found in c:\xampp\htdocs\stats\Test\BaseballTest.php
我有以下结构:
根/ Baseball.php
namespace stats;
class Baseball {
//some code
}
根/ phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./Test/</directory>
</testsuite>
</testsuites>
</phpunit>
根/测试/ BaseballTest.php
namespace stats\Test;
use stats\Baseball;
class BaseballTest extends \PHPUnit_Framework_TestCase {
$baseball = new Baseball(); // doesn't work
}
根/ composer.json
{
"require": {
},
"require-dev": {
"phpunit/phpunit": "*"
},
"autoload": {
"psr-0": {
"stats": ""
}
}
}
(stats文件夹是根目录。)
当我将BaseballTest.php
移出测试文件夹并将其放入根目录时似乎工作正常。我正在使用composer来执行
如果你们能帮助我,那会很棒!
提前致谢!
答案 0 :(得分:1)
使用当前目录布局和编写器配置,Baseball
类应位于stats
目录中。
您可以将其保留在根目录中,但是您需要切换到psr-4
自动加载器,它允许您跳过命名空间映射中包含的目录:
{
"require": {
},
"require-dev": {
"phpunit/phpunit": "*"
},
"autoload": {
"psr-4": {
"stats\\": ""
}
}
}
名称空间前缀名称的尾随斜杠很重要(stats\\
)。
有关自动加载标准的更多信息:
我还建议您使用更标准的目录布局。将您的类放入src
目录,将测试放入tests
目录。命名空间大多是大写的。这是它的样子:
<?php
// src/Baseball.php
namespace Stats;
class Baseball
{
}
<?php
// tests/BaseballTest.php
namespace Stats\Tests;
use Stats\Baseball;
class BaseballTest extends \PHPUnit_Framework_TestCase
{
public function testIt()
{
$baseball = new Baseball();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
{
"require": {
},
"require-dev": {
"phpunit/phpunit": "*"
},
"autoload": {
"psr-4": {
"Stats\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Stats\\Tests\\": "tests"
}
}
}