在PHPUnit测试中找不到Slim / Http / Environment

时间:2017-12-25 06:54:58

标签: php unit-testing phpunit composer-php slim

我正在使用Slim/Composer开发API,我目前正在尝试使用PHPUnit实现一些单元测试。当我通过命令行运行测试时,我一直遇到错误:

Fatal error: Class 'Slim\Http\Environment' not found
in C:\workspace\client\website\client\api\client-api\src\testclasses\dao\GenreDaoTest.php
on line 15

我的composer.json看起来像这样:

{
    "require": {
        "slim/slim": "^3.1",
        "slim/php-view": "^2.0",
        "monolog/monolog": "^1.17",
        "robmorgan/phinx": "^0.5.1",
        "firebase/php-jwt": "^5.0",
        "vlucas/phpdotenv": "^2.4",
        "tuupola/slim-jwt-auth": "^2.3"
    },
    "autoload": {
        "psr-4": {
            "": ["classes/dao",
                 "classes/controller",
                 "classes/app",
                 "testclasses/dao"]
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^5.7"
    }
}

我的测试类看起来像这样:

<?php

use \Slim\Http\Environment as Environment;
use \Slim\Http\Request as Request;
use \Slim\Http\Response as Response;

class GenreDaoTest extends \PHPUnit_Framework_TestCase {

   public function testTemp() {
      $this->assertEquals(0, 0);
   }

   public function testGenres() {

      $environment = Environment::mock([
         'REQUEST_METHOD' => 'GET',
         'REQUEST_URI' => '/api/v1/genres'
      ]);

      $request = \Slim\Http\Request::createFromEnvironment($environment);
      $response = new Response();

      $this->assertEquals('test', 'test');
   }
}
?>

如果我注释掉整个第二个测试,留下使用语句,第一个测试将通过没有问题。我想也许这与测试文件的位置有关,所以我将它移动到classes / app目录,其中我有其他具有类似导入的类,我看到相同的结果,所以我不< em>想想它与文件存在的位置有关。

我能想到的唯一两件事是当我通过命令行($ phpunit src / testclasses / dao / GenreDaoTest.php)运行测试或者我的Composer设置出错时,会发生一些事情。

我通常都是Java工程师,所以我可能在PHP领域也缺少一些简单的东西:)

有人有什么建议吗?我非常感谢!

(另外,据我所知,我可能不应该在DAO的测试中测试API请求/响应,我正在重构过程中)

2 个答案:

答案 0 :(得分:0)

使用phpunit时,可以在运行测试之前告诉它包含vendor/autoload.php。为此,您可以更改phpunit.xml使其包含以下内容:

<phpunit bootstrap="./vendor/autoload.php">
    ...
</phpunit>

或者从命令行调用--bootstrap vendor/autoload.phpphpunit命令时,您也可以将其传递给该命令:

phpunit --boostrap vendor/autoload.php <tests directory>

PHPUnit documentations下的测试执行部分中了解更多信息。
我还建议阅读this question及其答案。

答案 1 :(得分:0)

我正在使用Slim 4,并且遇到了同样的问题。

我改变了:

use \Slim\Http\Request as Request;

作者

use Slim\Psr7\Environment;

为我工作!!!