PHPUnit是面向程序员的PHP测试框架。它是单元测试框架的xUnit体系结构的一个实例。
我需要在控制台命令上运行几个测试,每个测试在运行测试之前都会对数据库进行一些小的更改。我的结构如下: ActionRemindCommandEmail 类
PHPUnit WithConsecutive 消失了,推荐的方法是什么?
PHPUnit 已连续删除。有多种方法可以解决它以重现类似的行为,我在本网站中找到了这些方法。 这个问题不是关于解决方法或替换 - 我...
我正在尝试测试工厂是否返回正确的实例。但是 ApiAuthRequest 类必须实现特定的接口才能使测试成功。我怎样才能做到呢? 我已经尝试过
“PHPUnit 测试资源管理器”VS Code 扩展给出“session_start(): 会话在标头已发送后无法启动”错误
我是使用“PHPUnit test explorer”VS Code 扩展进行 PHP 单元测试的新手。 运行 php 单元测试时出现以下错误: session_start(): 会话无法在 header 之后启动...
为什么我的过滤关系集合是空的,尽管模拟了有效的 HasMany 关系?
我正在编写一个单元测试来过滤掉模型中的无效关系。目标是仅保留模型中实际存在的关系。但是,我的测试失败了,因为过滤了关系
模拟 ArrayCollection 的 PHPUnit 函数 toArray() 返回 null
如果 Doctrine 包含 item,但 $arrayCollection->toArray() 返回 null,我想创建一个 ArrayCollection 的 MockObject。我的代码如下: $subEntity = $this->createMock(SubEntity::class); $
我不明白为什么我的 SonarCloud 覆盖率报告显示为 0%。这是我所掌握的所有信息: 适用于所有事物的 Bitbucket 云 Laravel 应用程序 使用PCOV生成代码覆盖率.xml报告 ...
我正在模拟 laravel 请求对象,我需要将模拟对象名称从 Mockery_3_API_V2_Custom_Requests_DestroyRequest 修改为 DestroyRequest。怎么可能呢? 受保护的功能...
如何在 laravel/phpunit 中测试查询执行需要多长时间? 有没有可能让它不依赖于其他东西?
PHPUnit 的 returnValueMap 未产生预期结果
我正在尝试使用 PHPUnit 的 returnValueMap() 来存根读取的结果。 它没有产生预期的结果,但等效的 returnCallback() 可以。 我已经提供了我的测试用例...
Laravel 5 单元测试 - 在 null 上调用成员函数connection()
我尝试为我的用户和商店模型之间的关系创建一个单元测试,但是当我运行vendor\bin\phpunit 时会抛出此错误,我不知道这一点,因为我是新手。 ..
我需要做的一些测试需要将已知数组与我从将要运行的函数中获得的结果进行比较。 用于递归比较数组: PHPUnit 有没有...
PHP 7.4 和 PHPUnit 9 使用 PHPUnit 主页示例 (https://phpunit.de/getting-started/phpunit-9.html): 私有函数 EnsureIsValidEmail(string $email): void { if (!filter_var($email,
这是我的 phpunit 测试文件 这是我的 phpunit 测试文件 <?php // DemoTest - test to prove the point function __autoload($className) { // pick file up from current directory $f = $className.'.php'; require_once $f; } class DemoTest extends PHPUnit_Framework_TestCase { // call same test twice - det different results function test01() { $this->controller = new demo(); ob_start(); $this->controller->handleit(); $result = ob_get_clean(); $expect = 'Actions is an array'; $this->assertEquals($expect,$result); } function test02() { $this->test01(); } } ?> 这是正在测试的文件 <?php // demo.php global $actions; $actions=array('one','two','three'); class demo { function handleit() { global $actions; if (is_null($actions)) { print "Actions is null"; } else { print('Actions is an array'); } } } ?> 结果是第二次测试失败,因为$actions为null。 我的问题是 - 为什么我的两次测试没有得到相同的结果? 这是phpunit的bug还是我对php的理解? PHPUnit 有一个名为“备份全局”的功能,如果打开,则在测试开始时会备份全局范围内的所有变量(由当前值组成快照),并且在每次测试完成后,这些值将被备份再次恢复到原来的值。您可以在这里阅读更多相关信息:http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html#content 现在让我们看看您的测试套件。 test01 已准备就绪 备份由所有全局变量组成(此时全局范围内的 $actions 尚未设置,因为代码尚未运行) test01 运行 demo.php 已包含(感谢自动加载)并且 $actions 已在全局范围内设置 你的断言成功了,因为 $actions 是在全局范围内设置的 test01 已被拆除。全局变量返回到其原始值。全局范围内的 $actions 此时已被销毁,因为它是在测试中内部设置的,因此在测试开始之前它不是全局状态的一部分 test02 运行..并失败,因为全局范围内没有 $actions。 直接解决您的问题:在 DemoTest.php 的开头包含 demo.php,这样 $actions 最终会在每次测试之前和之后备份和恢复的全局范围内结束。 长期修复:尽量避免使用全局变量。这只是一个坏习惯,总有比使用“全局”的全局状态更好的解决方案。
我正在掌握 PHPUnit,到目前为止发现它非常容易使用,但我遇到了一个给我带来困难的测试用例。 我正在针对一组接口编写代码,
我如何运行特定的phinx seeder并在phpunit中获取生成的记录?
我做了一个芬克斯播种机: 使用 Phinx\Seed\AbstractSeed; ManagerRole 类扩展 AbstractSeed { /** * 运行方法。 * * 使用此方法编写数据库播种器。 * * 更多
我正在开发一个 Symfony4 应用程序,想要测试服务是否真的更新我的数据库。 这里我给出一个数据传输对象 公共函数更新(ChargeDto $chargeDto):ChargeDto { $费用=$
PHP/Laravel:错误:在 null 上调用成员函数 __call()
我目前正在开发一个 Laravel 项目,并且面临着为数据透视表设置工厂的问题。具体来说,我正在尝试为一个表创建一个工厂,作为
Laravel 8 普单元8 PHP 8 我有以下 phpunit.xml Laravel 8 Phpunit 8 PHP 8 我有以下 phpunit.xml <?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" printerClass="\Sempro\PHPUnitPrettyPrinter\PrettyPrinterForPhpUnit9"> <coverage processUncoveredFiles="true"> <include> <directory suffix=".php">./app</directory> </include> <exclude> <directory suffix=".php">./app/Flare/MapGenerator</directory> </exclude> </coverage> <testsuites> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Console</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> </testsuites> <php> <ini name="memory_limit" value="-1" /> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <env name="MAIL_DRIVER" value="array"/> <env name="MAIL_USERNAME" value="[email protected]" /> <env name="QUEUE_CONNECTION" value="sync"/> <env name="DB_CONNECTION" value="sqlite"/> <env name="DB_DATABASE" value=":memory:"/> <env name="SESSION_DRIVER" value="array"/> <env name="BROADCAST_DRIVER" value="log"/> <env name="TIME_ZONE" value="America/Edmonton"/> </php> </phpunit> 当我这样做时./vendor/bin/phpunit,测试真的很慢,而且我的数据库正在被覆盖。 据我所知,这是告诉测试使用 sqlite 数据库的方式,我已经设置了配置: 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => database_path('database.sqlite'), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], // ... ] 如果我删除该数据库文件并运行测试 - 它并不关心。它不会像应有的那样爆炸,它只是继续运行测试。 我错过了什么吗?我设置了正确的变量,PHP 单元应该会选择它。它只是随机停止工作并停止使用 sqlite 数据库并转而使用 mysql。 如果我弄乱了 phpunit 文件,然后运行命令,它就会崩溃,所以我知道它正在读取文件。只是由于某种原因不使用变量。 想法? 我知道这个问题。 如果你在开发中从未运行过:php artisan config:cache这些缓存的值将被使用而不是你的 phpunit 环境变量,从而造成各种破坏。 相反,您必须 php artisan config:clear,然后再次运行测试。 对我来说force="true"成功了。 <env name="FOO" value="bar" force="true"/>
PHPUnit 测试依赖于第三方插件的 Shopware 6 插件
我想对一个依赖于第三方插件的shopware 6 插件进行单元测试。这是我的 service.xml: <