【问题标题】:Setting up php project with composer and phpunit使用 composer 和 phpunit 设置 php 项目
【发布时间】:2016-04-23 15:06:55
【问题描述】:

我正在尝试建立一个新的 php 项目。由于我是 phpunit 和 composer 的新手,所以我在项目设置上苦苦挣扎。

我的文件夹结构如下:

- TestProject
-- src
--- Controller
----- Foo.php
--- index.php
-- tests
--- Controller
----- FooTest.php
-- vendor
-- composer.json
-- phpunit.xml

我的作曲家文件:

"require": {
   "php": ">=5.4.0"
},
"require-dev": {
   "phpunit/phpunit": "4.7.*"
},
"autoload": {
   "psr-4": {
       "TestProject\\": "src/"
   }
},
"autoload-dev": {
   "psr-4": {
       "TestProject\\Tests\\": "tests/"
   }
}

我的 phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="TestProject Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>

Foo.php

namespace TestProject\Controller;

class Foo
{
    private $amount;

    public function __construct($amount)
    {
        $this->amount = $amount;
    }

    public function getAmount()
    {
        return $this->amount;
    }
}

FooTest.php

namespace TestProject\Tests\Controller;

class FooTest extends \PHPUnit_Framework_TestCase
{
    public function testCanBeNegated()
    {
        // Arrange
        $a = new Foo(1);

        // Act
        $b = $a->getAmount();

        // Assert
        $this->assertEquals(1, $b->getAmount());
    }
}

但现在我不确定要让./vendor/bin/phpunit . 运行我缺少什么。目前它给了我一个错误:

PHP Fatal error:  Uncaught PHPUnit_Framework_Exception: Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.

【问题讨论】:

  • 您是否在项目中添加了 Composer 的 autoload.php?如果没有,require __DIR__ . '/vendor/autoload.php';
  • 我将此bootstrap="./tests/start.php" 添加到phpunit.xml。它包含require_once __DIR__ . '/../vendor/autoload.php';。应该够了吧?
  • Composer 的autoload.php 通常加载到项目的根目录(不在phpunit.xml 中)。看看 Laravel、Drupal 和其他流行的 PHP 项目。
  • 您是否在代码中的某处引用了PHPUnit_Extensions_RepeatedTest?您可以使用 -v 选项运行 phpunit 以查看错误的堆栈跟踪。
  • 我发现了错误,我在TestProject文件夹中运行了命令./vendor/bin/phpunit . 。所以 phpunit 运行了整个项目,而不仅仅是 ./src 文件夹中的文件。

标签: php phpunit composer-php


【解决方案1】:

您需要在PHPUnit_Framework_TestCase 之前添加反斜杠以从根命名空间加载类:

class FooTest extends \PHPUnit_Framework_TestCase

【讨论】:

  • 如果我这样做,我会得到Uncaught PHPUnit_Framework_Exception: Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.
  • 这是另一个问题。添加自动加载到 phpunit.xml:&lt;phpunit bootstrap="vendor/autoload.php"
  • 我在 phpunit.xml 中添加了 &lt;phpunit colors="true" bootstrap="./tests/bootstrap.php"&gt; 这个。 bootstrap.php 文件包含:require_once __DIR__ . '/../vendor/autoload.php';
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 2012-09-14
  • 2021-02-19
  • 2013-10-12
  • 2017-11-10
  • 2020-11-10
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多