PHP:Composer自动加载无法正常工作

时间:2016-03-09 05:47:40

标签: php composer-php

其实我是PHP新手。我从一个几乎空的文件夹中运行它(实际上遵循Lara-casts教程:使用TDD设计Fluent API)。

我的目录结构类似于

  • SRC
    • Expression.php
  • 测试
    • ExpressionTest.php
  • 供应商
  • composer.json
  • composer.lock

在composer.json里面:

Exception in thread "Animation Thread" java.lang.RuntimeException: java.lang.RuntimeException: Framebuffer objects are not supported by this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
    at com.jogamp.common.util.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58)
    at jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103)
    at jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:206)
    at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:172)
    at javax.media.opengl.Threading.invoke(Threading.java:191)
    at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:541)
    at processing.opengl.PJOGL.requestDraw(PJOGL.java:688)
    at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1651)
    at processing.core.PApplet.run(PApplet.java:2256)
    at java.lang.Thread.run(Unknown Source)

Inside ExpressionTest.php:     

{    
    "require-dev": {
        "phpunit/phpunit": "^5.2"
    },
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    }
}

Inside Expression.php

class ExpressionTest extends PHPUnit_Framework_TestCase
{
    /** @test */
    public function it_finds_a_string()
    {
        $regex = Expression::make()->find('www');

        $this->assertRegExp($regex, 'www');
    }
}

然后我运行composer dump-autoload并运行phpunit,但我仍然得到:

<?php

class Expression
{

}

我的语法有问题吗?我对Composer的理解非常基础。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要在测试的顶部包含自动加载器。它通常在

require __DIR__ . '/vendor/autoload.php';

您还可以添加一个phpunit.xml文件告诉它自动加载器的位置然后它会在每次测试之前运行它:

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
    bootstrap="/path/to/bootstrap.php"

</phpunit>

答案 1 :(得分:1)

PHPUnit本身并不了解Composer,因此如果不配置PHPUnit,它将无法了解您的自动加载器设置。

尝试使用--bootstrap vendor/autoload.php运行PHPunit,告诉它加载自动加载文件。

如果这不起作用,请检查Composer配置中的命名空间值(即"": "src/"可能需要更改。)