当前位置: 首页 > 知识库问答 >
问题:

PHPUnit测试中未找到Slim/Http/Environment

羊新翰
2023-03-14

我正在用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');
   }
}
?>

如果我注释掉整个第二个测试,留下use语句,第一个测试将毫无问题地通过。我认为这可能与测试文件的位置有关,因此我将其移动到classes/app目录,在那里我有其他具有类似导入的类,并且我看到了相同的结果,因此我认为这与文件所在的位置无关。

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

我通常是一个Java工程师,所以我可能在PHP领域也错过了一些简单的东西:)

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

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

共有2个答案

阴波峻
2023-03-14

我使用Slim 4,也有同样的问题。

我改变了:

use \Slim\Http\Request as Request;

通过

use Slim\Psr7\Environment;

为我工作!!!

仲孙小云
2023-03-14

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

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

或者您可以传递--引导供应商/自动加载。从命令行调用phptophpunit命令时:

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

请阅读PHPUnit文档中测试执行部分下的更多内容<我还建议阅读这个问题及其答案。

 类似资料:
  • 在试图用PHPUnit设置Eclipse作为单元测试库时,我陷入了试图运行一个简单测试用例的困境。作为参考,我按照本教程使用PHPUnit/Xdebug/Makegood来设置Eclipse,唯一偏离给出的指导方针是为PHPUnit/Makegood设置以下配置文件: 现在,问题的根源在于,我似乎无法使用Makegood从Eclipse运行PHPUnit测试。我编写的唯一测试(位于名为test.p

  • 我想运行PHPUnit 6.0。*PhpStorm中的测试。但当我想要执行单个类的测试时,它向我显示了以下错误:“测试类未指定或无效”。 我在PHPUnit中加入了作曲家。这里是内容: 在命令行中运行测试正在工作。输出: 一些补充信息: PhpStorm设置: PHP语言级别:7.1 CLI解释器:7.1 PHPUnit使用Composer autoloader(链接到autoload.php)

  • 我是PHPUnit和单元测试的新手,所以我通过作曲家安装了PHPUnit和phar,一切都很好,直到我尝试开始我的简单测试。我使用PhpStorm,我可以看到所有的类都是自动加载的,但是当我试图开始我的测试时,我得到了一个错误: 我不明白他为什么要在高于PHPUnit的文件夹中查找它? 我试图在composer中配置自动加载部分。json和检查phpunit中的设置。xml,但什么都不起作用。 加

  • 这是一个关于PHP单元测试的问题,给出了一个类NotFound错误。 背景资料 我正在使用Zend Studio 10.5开发Zend Framework 2应用程序。我加载了一些模块,包括和 FedcoUser是具有使用BJYAAuthorize的保护规则的控制器保护的模块: 使用Zend Studio 10.5本机菜单,我为上面的控制器创建了一个测试用例。当我运行它时,我得到以下错误: 我的假

  • 我想在子目录中使用Slim 3,但似乎无法加载它。所有文件都包含在子目录中,包括composer。json。这是我的作曲家。json: 这是我的剧本: 我尝试了很多方法,包括使用composer安装Slim时找不到Slim类,以及PHP致命错误:找不到“Slim”类。不幸的是,他们没有解决我的问题。 我得到的错误是

  • 有人知道我在哪里可以找到适用于JAVA 16的docker映像JRE SLIM版本吗?找不到来自Adopenjdk、openjdk或amazoncorretto的任何内容。至少它没有被列为“16-jre-Slim”或类似的smth。