未找到但正确包含 PHPUnit 类

Posted

技术标签:

【中文标题】未找到但正确包含 PHPUnit 类【英文标题】:PHPUnit class not found but included correctly 【发布时间】:2015-11-25 11:43:23 【问题描述】:

我正在使用带有 cakephp 的 phpunit 进行测试,但是当我尝试运行某些测试类时会抛出 致命错误 但该类已正确插入,甚至没有被 PHPStorm 指责丢失文件错误。

执行测试用例的命令:

c:\xampp\htdocs\PROJETOS\Shopping\vendor\phpunit>phpunit "C:/xampp/htdocs/PROJETOS/Shopping/tests/TestCase/Model/Table/UsersTableTest.php"

致命错误:

致命错误:在 'Cake\TestSuite\TestCase' 类中找不到 C:\xampp\htdocs\PROJET OS\Shopping\tests\TestCase\Model\Table\UsersTableTest.php 在第 12 行

测试用例:

<?php
namespace App\Test\TestCase\Model\Table;

use App\Model\Table\UsersTable;
use Cake\ORM\TableRegistry;
use Cake\TestSuite\TestCase;

/**
 * App\Model\Table\UsersTable Test Case
 */
class UsersTableTest extends TestCase


    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = [
        'app.users',
        'app.user_types',
        'app.bookings',
        'app.stores'
    ];

    /**
     * setUp method
     *
     * @return void
     */
    public function setUp()
    
        parent::setUp();
        $config = TableRegistry::exists('Users') ? [] : ['className' => 'App\Model\Table\UsersTable'];
        $this->Users = TableRegistry::get('Users', $config);
    

    /**
     * tearDown method
     *
     * @return void
     */
    public function tearDown()
    
        unset($this->Users);

        parent::tearDown();
    

    /**
     * Test initialize method
     *
     * @return void
     */
    public function testInitialize()
    
        $this->markTestIncomplete('Not implemented yet.');
    

    /**
     * Test validationDefault method
     *
     * @return void
     */
    // Método que deverá testar o método "validationDefault()" de "UsersTable",
    // mas como e quando este método será chamado?
    // A ferramenta seleciona o método a ser executado
    public function testValidationDefault()
    
        $this->markTestIncomplete('Not implemented yet.');
    

    /**
     * Test buildRules method
     *
     * @return void
     */
    public function testBuildRules()
    
        $this->markTestIncomplete('Not implemented yet.');
    

    public function testFindUserById()
        $query = $this->Users->find('userById', [
            'conditions' => ['Users.id' => 900000],
            'fields' => ['Users.id', 'Users.email', 'Users.password',
                'Users.username', 'Users.user_type_id', 'Users.created',
                'Users.modified']
        ]);
        $this->assertInstanceOf('Cake\ORM\Query', $query);
        $result = $query->hydrate(false)->toArray();

        $expected = [
            [
                'id' => 900000,
                'email' => 'usuariocomum1@gmail.com',
                'password' => 'usuariocomum1senha',
                'username' => 'usuariocomum1username',
                'user_type_id' => 900000,
                'created' => '2015-07-17 18:46:47',
                'modified' => '2015-07-17 18:46:47'
            ]
        ];

        $this->assertEquals($expected, $result);
    

在文件夹中:[ProjectName]/tests/ 有 2 个文件夹 Fixture 和 TestCase 以及 1 个文件 bootstrap.php

我的文件夹结构:

配置和测试文件夹:

phpunit 文件夹(在 vendor 文件夹内(与 composer 一起安装))

供应商文件夹中的bin文件夹

当我使用 composer 删除 phpunit 时,请遵循以下答案:How to remove unused dependencies from composer? 仍然有一个带有奇怪文件的文件夹 phpunit(可以吗?)

注意:我使用的是 CakePHP 3.0.11 和 PHPHUnit 4.8

【问题讨论】:

你在哪里进行引导/自动加载? 在文件夹中:[ProjectName]/tests/ 有 2 个文件夹 Fixture 和 TestCase 以及 1 个文件 bootstrap.php,我该如何引导? 您可以将配置文件传递给phpunit,告诉它如何引导。我不知道它是如何工作的。这是文档:phpunit.de/manual/current/en/appendixes.configuration.html @Halcyon 我把这个 XML 配置放在哪里?我把我的文件夹 @ricardo 如果您在使用composer 删除phpunit 时没有收到任何错误,则可以删除vendor/phpunit 文件夹。 【参考方案1】:

根据CakePHP documentation,您应该运行位于vendor/bin 文件夹中的phpunit 可执行文件(在您的CakePHP 应用程序中有一个phpunit.xml.dist 文件,因此您应该从根文件夹运行该可执行文件):

C:\...\Shopping> vendor\bin\phpunit tests\TestCase\Model\Table\UsersTableTest.php

如果你没有这样的可执行文件,你可能有一个“坏”的phpunit 安装。您应该删除它(以及 vendor/phpunit 文件夹)并使用以下命令重新安装:

php composer.phar require phpunit/phpunit:4.8

【讨论】:

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

为 PHPUnit 创建一个基本测试类并将其扩展为常见功能会导致类未找到错误

Laravel单元测试类未找到错误

Laravel 单元测试类未找到错误

检查类是不是具有使用 PHPUnit 定义的常量的正确方法

PHPUnit 测试用例未执行

PHPUNIT 给出 COLOR_AUTO 未定义的类常量