【问题标题】:Unable to instanciate object within phpunit testdirectory无法在 phpunit 测试目录中实例化对象
【发布时间】:2016-05-22 20:54:13
【问题描述】:

我正在尝试找出 phpunit,但是当我尝试在 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 来执行

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

提前致谢!

【问题讨论】:

    标签: php phpunit composer-php


    【解决方案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"
            }
        }
    }
    

    【讨论】:

    • 像魅力一样工作!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2018-03-10
    • 2014-09-25
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多