首页 > 解决方案 > PHPUnit - 错误:调用测试文件中未定义的函数

问题描述

当我在引用与我试图调用的函数位于同一文件中的另一个类之前尝试调用函数时,出现此错误。

// new ICMS;如果该行未注释,则不会发生此错误。

作曲家 json

    "autoload": {
        "psr-4": {
            "Gbbs\\NfeCalculos\\": "src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Gbbs\\NfeCalculos\\Tests\\": "tests"
        }
    },

文件夹结构

nfe-calculos/
├── src/
│  └── ICMS.php
└── tests/
   └── ICMSTest.php

ICMS.php

<?php

declare(strict_types=1);

namespace Gbbs\NfeCalculos;

use Exception;

class ICMS
{}

function pICMSFromUFs(string $ufOrigem, string $ufDestino): float
{
    throw new Exception('UF inexistente: ' . $ufOrigem . ' - ' . $ufDestino);
}

ICMSTest.php

<?php

declare(strict_types=1);

namespace Gbbs\NfeCalculos\Tests;

use Gbbs\NfeCalculos\ICMS;
use PHPUnit\Framework\TestCase;

use function Gbbs\NfeCalculos\pICMSFromUFs;

class ICMSTest extends TestCase
{
    /**
     * Test invalid UFs
     */
    public function testInvalidUFsInpICMSFromUFs()
    {
        // new ICMS;
        $this->expectException('\Exception');
        pICMSFromUFs('1', '1');
    }
}

标签: php

解决方案


如果您只想调用该函数,则必须包含源文件(require_once()或类似文件)。

正在发生的事情是自动加载器正在检测您想要使用ICMS该类,因此它正在为您加载文件。这包括您正在调用的函数。

你可以做一些事情,比如echo在 ICMS.php 源文件中添加一个,你应该看到它被显示来证明这一点。

TBH - 源文件应该只是类,如果函数与类有关,您可以将其添加为static方法并将其调用为

ICMS::pICMSFromUFs('1', '1');

推荐阅读