无法在 phpunit 测试目录中实例化对象

Unable to instanciate object within phpunit testdirectory

我试图找出 php 单位,但是当我尝试在 tesfile 中实例化一个对象时,我不断收到以下错误:

Fatal error: Class stats\Baseball not found in c:\xampp\htdocs\stats\Test\BaseballTest.php

我有以下结构:

root/Baseball.php

namespace stats;

class Baseball {
    //some code
}

root/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>

root/Test/BaseballTest.php

namespace stats\Test;

use stats\Baseball;

class BaseballTest extends \PHPUnit_Framework_TestCase {
     $baseball = new Baseball(); // doesn't work
}

root/composer.json

{
    "require": {
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    },
    "autoload": {
        "psr-0": {
            "stats": ""
        }
    }
}

(stats 文件夹是根目录。)

当我将 BaseballTest.php 移出测试文件夹并将其放入根目录时,它似乎工作正常。我正在使用 composer 来执行

如果你们能帮助我,那就太好了!

提前致谢!

根据您当前的目录布局和作曲家配置,Baseball class 应该在 stats 目录中。

您可以将它保存在您的根目录中,但您需要切换到 psr-4 自动加载器,它可以让您跳过命名空间映射中包含的目录:

{
    "require": {
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    },
    "autoload": {
        "psr-4": {
            "stats\": ""
        }
    }
}

命名空间前缀名称的尾部斜杠很重要 (stats\)。

有关自动加载标准的更多信息:

我还建议您使用更标准的目录布局。将您的 classes 放入 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"
        }
    }
}