我正在尝试使用Codeception进行基本的单元测试。没有使用任何框架。
我的工作根目录如下:
tests |
|-unit
|-Test.php
includes|
|-general
|-Custom.php
在Custom.php
<?php
namespace Custom;
class General {
public static function check(){}
}
我的测试用例是:
<?php
use Custom\General;
use PHPUnit\Framework\TestCase;
final class Test extends TestCase
{
public function testPushAndPop(): void
{
General::check();
}
}
我的composer.json中还有:
"autoload": {
"psr-4":{
"Custom\\":"includes/general"
}
},
当我跑的时候
php vendor/bin/codecept run unit
...
1) Test: Push and pop
Test tests/unit/Test.php:testPushAndPop
[Error] Class 'DB\General' not found
#1 /var/www/html/prj/tests/unit/Test.php:9
代码欺骗简单的单元测试无法找到我的命名空间
这不是关于代码欺骗,而是关于PHP自动加载一般是如何工作的,以及在Composer中自动加载的配置具体是什么:
{
"autoload": {
"psr-4":{
"Custom\\":"includes/general"
}
}
}
甚至路径段includes/general
也映射到文件系统路径includes/general/
(编写者应该告诉您在路径段的末尾添加/
),错误消息
[Error] Class 'DB\General' not found
#1 /var/www/html/prj/tests/unit/Test.php:9
显示Composer配置中的Custom\\\
命名空间与未找到的类的命名空间不同(即DB\\\
)。
因此,即使您正在使用的框架(您有一个,那就是测试框架)也可能加载composer自动加载程序(很可能),只是找不到该类。
正如@Naktibalda已经在评论中强调的那样,这只是一个普通的自动加载器配置问题。
你是对的,但为什么?IDE没有声明任何错误。。。(你的反应)
这是两双鞋。
您的IDE很可能不依赖自动加载程序,而只是从文件系统猜测文件。
根据IDE的维护和配置情况,它可能应该也可能会突出显示这一点。
另一方面,PHP只能依赖自动加载器,在您的情况下,您将自动加载委托给作曲家(1)
,而不是您的IDE。
因此,也许在这方面也有改进,作曲家对您的项目开发来说比IDE更重要。
因此,有一个建议:
每当更改composer.json
文件时,我建议运行作曲家验证-严格
来检查您的状态,然后跟随作曲家更新
。
在运行测试之前自动运行此选项。您可能不想运行composer update
,然后在运行测试运行程序之前运行composer install
,如果您将它作为开发依赖项。
为composer.json
中的单个测试运行命令绑定此命令的示例:
{
"scripts": {
"test": [
"@composer --no-plugins --version",
"@composer validate --strict",
"@composer --no-plugins -q install --no-scripts --no-progress",
"codecept run unit"
]
}
}
然后,只需一次调用即可运行基于Composer的项目中的所有重要内容:
$ composer test
...
顺便说一下,运行单元测试是验证自动加载配置的好方法。使用作曲家测试脚本,您也可以确保在运行测试套件时它始终是最新的。
从技术上讲,您不需要IDE,这使得它更具可移植性和稳定性,从而使您的基于作曲家的项目得以发展。
我在使用Yii2进行Codeception时遇到了一些问题。我刚刚升级到Yii 2.0.10,一直在使用本指南 我收到错误:
我正在编写一组简单的PHP函数,我只使用纯PHP7,没有框架,什么都没有。这些函数稍后将在CMS中的插件中使用,但这不是重点。我想使用Codeception为我的函数编写单元测试(为了熟悉它,我知道Codeception基本上只在这里运行PHPUnit),但我真的不知道如何以合理的方式将Codeception指向我的代码。 我的结构如下:我有,其中包含我想要测试的函数,大致如下: 我使用Compo
我正在尝试使用yii2 codeception。我有一个名为Client的类,它扩展了ActiveRecord。 规则()函数: 我在tests\codeception\unit\models文件夹中创建了一个名为ClientTest的文件,该文件包含以下内容: 当我使用“codecept run unit--debug”命令运行测试时,我看到
我有一个PHP应用程序,我们正在添加测试,使用代码欺骗。我们试图添加指定(和验证)到我们的套件,但它不被识别。你如何正确设置指定与代码欺骗一起使用? 在我的composer.json中,我有以下内容: 我在添加指定和验证后运行了作曲家更新,并获得了以下输出: 我有一个这样的测试(主要是由generate:test生成的): 当我运行单元测试时,我会得到以下输出: 我使用的参考文献是:http://
我正在努力提高Go gRPC服务器的覆盖率,但我在为服务器的拦截器功能编写测试时遇到了麻烦,因为我无法有意义地满足类型。 我有一个带有以下签名的函数: 我假设任何gRPC方法都会满足的签名: 所以我尝试传入一个具有此签名的方法: 我想象这会起作用,因为这是拦截器实际正在做的事情(转发RPC),但出于某种原因Go抱怨道: 不能使用AuthService。GetToken(类型func(上下文。上下文
我在laravel中有一个资源控制器来管理我的用户。这将创建一个更新用户信息的路由,该路由使用HTTP PUT方法接收请求。 这里显示命令输出: 它在我的web浏览器上正常工作,但当我尝试使用codeception运行测试并提交表单时,我得到一个method not allowed异常,测试失败。 我试图了解为什么会发生这种情况,这似乎是codeception提出的请求。该请求是通过POST而不是