PHPUnit:找不到我的包类

Posted

技术标签:

【中文标题】PHPUnit:找不到我的包类【英文标题】:PHPUnit: My Package Class not found 【发布时间】:2017-02-03 11:42:12 【问题描述】:

我正在为 Laravel 5 开发一个包,我的 phpUnit 测试因 error 而失败

“找不到类 VendorName\PackageName\MyPackage”

我仍然无法确定造成此错误的原因,如果有人提供帮助,我会很高兴。

这是我的结构的样子:

src/
    ├─ MyPackage.php
test/
    ├─ MyPackageTest.php
composer.json
composer.lock

Composer.json

"psr-4": 
    "VendorName\\PackageName\\": "src/"
,
"autoload-dev": 
    "psr-4": 
        "VendorName\\PackageName\\Test\\": "tests/"
    
,

这(可能)是我的错误的来源:

MyPackageTest.php

namespace VendorName\PackageName\Test;

use PHPUnit\Framework\TestCase;
use VendorName\PackageName\MyPackage;

class MyPackageTest extends TestCase

    protected $app;

    public function setUp()
    
        $this->app = new MyPackage();
    

这是我的 phpunit.xml 文件

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
         backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         covertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
>
         <testsuites>
           <testsuite name="Interswitch Test Suite">
             <directory suffix=".php">./tests/</directory>
           </testsuite>
         </testsuites>
  </phpunit>

我已经完成了通常的composer dump-autoload 仪式以使其正常工作,但都无济于事。

我还用上面的内容更改了我的 Laravel 项目根目录中的 composer.json 文件,但我仍然无法让它工作。

【问题讨论】:

尝试要求您的供应商自动加载文件或在 phpunit.xml 文件中引导它。 @Follio 我已经这样做了bootstrap="vendor/autoload.php" 在 app.php 中添加 require 提供者和别名 @Komal 绝对这样做是为了让包首先正常工作。目前坚持使用 PHPUnit 测试。 【参考方案1】:

无法重现。使用以下 composer.json 对我来说效果很好:


    "require": 
       "phpunit/phpunit": "^5.5"
    ,
    "autoload" : 
        "psr-4": 
            "VendorName\\PackageName\\": "src/"
        
    

和phpunit.xml:

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
    bootstrap="./vendor/autoload.php">

    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">test</directory>
        </testsuite>
    </testsuites>
</phpunit>

【讨论】:

很奇怪。我仍然有这个问题。 我刚刚在我的原始帖子中包含了phpunit.xml 配置。如果你能帮我检查一下我是否走上正轨,我会很高兴。 你确定你在使用这个文件吗?我的意思是你以vendor/bin/phpunit -c phpunit.xml 运行你的测试吗?您的供应商/作曲家/autoload_psr4.php 是否包含 "'VendorName\\PackageName\\' => array($baseDir . '/src')" ?您使用的是确切名称还是其他名称(名称区分大小写)? 终于解决了这个问题!我检查了我的vendor/composer/autoload_psr4。事实证明,这与 laravel 的 composer.json 文件发生冲突,因为我之前将包命名空间转储到该文件上,并且我将测试命名空间转储到了包的 composer.json 上。我已经更正了,PHPUnit 断言现在是绿色的:D。非常感谢亚历克斯。

以上是关于PHPUnit:找不到我的包类的主要内容,如果未能解决你的问题,请参考以下文章

控制器类找不到 html 模板

java 主启动类找不到

为啥通过 PhpUnit 运行测试时找不到我的自定义 TestCase 类?

PHP 致命错误:找不到类 - PHPUnit

Python MainWindow 类找不到属性

PHPUnit 找不到类