【问题标题】:Class not found in PHPUnit but recognized by Visual Studio Code在 PHPUnit 中找不到类但被 Visual Studio Code 识别
【发布时间】:2018-10-19 09:35:28
【问题描述】:

当我在我的项目中运行 PHPUnit 时,我遇到了这个问题。

$ vendor/bin/phpunit

PHPUnit 6.5.8 by Sebastian Bergmann and contributors.

Estring(29) "PHPFuzzy\Models\CriterionList"


Time: 59 ms, Memory: 4.00MB

There was 1 error:

1) FuzzyAHPTest::testDefineDecisionMaker
Error: Class 'PHPFuzzy\Models\CriterionList' not found

~/Documents/PHPFuzzy/tests/FuzzyAHPTest.php:10

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.

测试/FuzzyAHPtest.php

use PHPFuzzy\Models\{FuzzyNumber as §, DecisionMaker, Criterion, CriterionList, Alternative, AlternativeList};
use PHPFuzzy\{ FuzzyMCDM, Utils };
use PHPUnit\Framework\TestCase;

class FuzzyAHPTest extends TestCase{
    public function testDefineDecisionMaker(){
        var_dump(CriterionList::class);
        $subcriteria1 = new CriterionList([
            new Criterion("SubCriteria 1"),
            new Criterion("SubCriteria 2"),
            new Criterion("SubCriteria 3")
        ]);
        $subcriteria2 = new CriterionList([
            new Criterion("SubCriteria 4"),
            new Criterion("SubCriteria 5"),
            new Criterion("SubCriteria 6"),
            new Criterion("SubCriteria 7")
        ]);
        $criteria = new CriterionList([
            new Criterion("Criteria 1", $subcriteria1),
            new Criterion("Criteria 2", $subcriteria2)
        ]);
        $alts = new AlternativeList([
            new Alternative("Kia"),
            new Alternative("Nissan"),
            new Alternative("Alfa Romeo")        
        ]);
        $dm = new DecisionMaker("Decision Maker 1", $criteria);
        $AHPSess = FuzzyMCDM::AHP($dm, $alts, $pcml);

        d($AHPSess->listPCMCombinations());
        // $this->assertEquals($expected->getMatrix(), $a->getMatrix());
    }


}

在 composer.json 中

{
    "name": "bahadircyildiz/phpfuzzy",
    "description": "Fuzzy Logic library.",
    "keywords": ["fuzzy", "logic", "library"],
    "license": "MIT",
    "authors": [
        {
            "name": "Bahadir Can Yildiz",
            "email": "mail@bahadircyildiz.com"
        }
    ],
    "type": "project",
    "require": {
        "php": ">=7.0",
        "markrogoyski/math-php": "^0.39.0"
    },
    "require-dev": {
        "phpunit/phpunit": "*",
        "kint-php/kint": "*"
    },
    "suggest":{
        "ext-operator": "Enables FuzzyNumber class to use arithmetic operators."
    },
    "autoload": {
        "psr-4": {
            "PHPFuzzy\\": "src/"
        }
    },
    "autoload-dev":{
        "psr-4": {
            "PHPFuzzy\\Tests\\": "tests/"
        }
    },
    "conflict": {
        "phpunit/php-timer": ">=2"
    }
}

这是我的文件结构

src/
  MCDM/
    FuzzyAHP.php
  Models/
    Alternative.php
    AlternativeList.php
    Criterion.php
    CriterionList.php
    ...
tests/
  FuzzyAHPtest.php
  ...

总结一下,我可以转储CriterionList类名,但是当我想创建一个实例时,找不到类。另一方面,Visual Studio Code 引用了该类。

【问题讨论】:

  • Visual Studio Code 不关心你的composer.json。无论是否使用,它都会读取项目中的所有文件。另一方面,PHP 解释器首先读取命令行中提供的文件,然后在文件为include/require-d 时加载每个文件。当它遇到一个类时,它并不知道它会调用自动加载器,然后自动加载器会找到定义该类的文件并加载它。

标签: php visual-studio-code phpunit


【解决方案1】:

我找到了解决方案。 Composer 没有正确生成自动加载文件。使用composer update 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2021-06-05
    相关资源
    最近更新 更多