php - 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');
}
}
解决方案
如果您只想调用该函数,则必须包含源文件(require_once()
或类似文件)。
正在发生的事情是自动加载器正在检测您想要使用ICMS
该类,因此它正在为您加载文件。这包括您正在调用的函数。
你可以做一些事情,比如echo
在 ICMS.php 源文件中添加一个,你应该看到它被显示来证明这一点。
TBH - 源文件应该只是类,如果函数与类有关,您可以将其添加为static
方法并将其调用为
ICMS::pICMSFromUFs('1', '1');
推荐阅读
- c++ - 如何强制编译器显示隐式构造函数
- javascript - 在velocity.js 最新更新(2.0.3)后无法读取属性“模式”错误
- python - 进程以退出代码 -1073740791 (0xC0000409) pycharm 错误完成
- php - Uncaught ImagickException: UnableToOpenBlob `application/pdf': 没有这样的文件或目录
- php - 如何从前端编辑或更新 wordpress 自定义数据库表?
- java - RabbitMQ 连接重置
- module - 如何在子模块中使用在模块中创建的异常(在 ocaml 中)
- android - Gradle 构建工具找不到 play-services-tasks.aar?为什么?
- ckeditor - 如何在 CKEditor 5 中禁用放置事件
- apache-spark - 如何使用 http 请求查询 Hive/Spark Thrift Server