Mockery fails with #39;Could not load mock ... class already exists#39; when running with --code-coverage(使用--code-coverage 运行时,嘲弄失败并显示“无法加载模拟......类已存在)
问题描述
我正在尝试为 phpunit 模拟一个类.PHP 单元失败并出现错误 Could not load mock ... class already exists
.这是我正在运行的唯一测试,因此不可能已经模拟了该类.
I am trying to mock a class for phpunit. Php unit fails with the error Could not load mock ... class already exists
. This is the only test I'm running, so it can't be the case that the class is mocked already.
任何建议都将不胜感激.
Any suggestion would be appreciated.
这是错误情况:
namespace TestsFeature;
use TestsTestCase;
class DeactivateACSTest extends TestCase
{
public function testDeactivateAcs()
{
$deviceController = Mockery::mock('overload:AppHttpControllersCloudDeviceController');
$deviceController
->shouldReceive('deactivateACS')
->andReturn('hilfehilfehilfe');
$devCon = new AppHttpControllersCloudDeviceController();
$this->assertEquals('hilfehilfehilfe', $devCon->deactivateACS());
}
}
在没有 --code-coverage
的情况下运行它:
When running it without --code-coverage
it works:
[13:10:15] vagrant@homestead [~/Code/ekp] $ phpunit --filter DeactivateACS
PHPUnit 6.5.10 by Sebastian Bergmann and contributors.
==> TestsFeatureDeactivateACSTest ✓
Time: 1.08 seconds, Memory: 16.00MB
OK (1 test, 3 assertions)
但是,当使用 --code-coverage
运行它时,它会失败:
However, when running it with --code-coverage
it fails:
[13:10:23] vagrant@homestead [~/Code/ekp] $ phpunit --coverage-html coverage --coverage-text=code_coverage.txt --filter DeactivateACSTest
PHPUnit 6.5.10 by Sebastian Bergmann and contributors.
==> TestsFeatureDeactivateACSTest ⚈
Time: 5.79 seconds, Memory: 44.00MB
There was 1 error:
1) TestsFeatureDeactivateACSTest::testDeactivateAcs
MockeryExceptionRuntimeException: Could not load mock AppHttpControllersCloudDeviceController, class already exists
/home/vagrant/Code/ekp/vendor/mockery/mockery/library/Mockery/Container.php:220
/home/vagrant/Code/ekp/vendor/mockery/mockery/library/Mockery.php:116
/home/vagrant/Code/ekp/tests/Feature/DeactivateACSTest.php:11
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Generating code coverage report in HTML format ... done
推荐答案
您应该在模拟此类的函数之前添加这些注释.
You should add these annotations before the functions that are mocking this class.
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
您可以查看 phpunit 文档作为参考.
For reference you can check out the phpunit documentation.
https://phpunit.de/manual/当前/en/appendixes.annotations.html#appendixes.annotations.runInSeparateProcess
https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.preserveGlobalState
这篇关于使用--code-coverage 运行时,嘲弄失败并显示“无法加载模拟......类已存在"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用--code-coverage 运行时,嘲弄失败并显示“无法加载模拟......类已存在"


基础教程推荐
- Yii2 - 在运行时设置邮件传输参数 2022-01-01
- 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
- 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
- PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
- Web 服务器如何处理请求? 2021-01-01
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
- 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
- php中的foreach复选框POST 2021-01-01
- php中的PDF导出 2022-01-01
- 将变量从树枝传递给 js 2022-01-01