symfony - 进行单元测试时找不到“安全”类
问题描述
我正在使用 phpunit 进行单元测试,我想在我的服务中测试一些方法。
这是我的测试代码:
<?php
namespace App\Tests;
use App\Services\SortingDataSearchedProductService;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class SearchedProductTest extends WebTestCase
{
private $sortingDataSearchedProductService;
public function setUp()
{
self::bootKernel();
$container = self::$container;
$this->sortingDataSearchedProductService = $container->get(SortingDataSearchedProductService::class);
}
public function testFindStatusLinkedToGrantedRoles() {
$grantedRolesList = [];
$this->sortingDataSearchedProductService->findStatusLinkedToGrantedRoles($grantedRolesList);
}
}
但是当我在这里尝试我的测试时,我得到了:
无法自动装配服务“App\Form\CpomAf\SearchProductType”:方法“__construct()”的参数“$security”引用类“Symfony\Component\Security\Core\Security”,但不存在此类服务。
我想我收到了这个错误,因为测试正在通过我要测试的功能所在的页面。这是我要测试的服务:
<?php
namespace App\Services;
use App\Entity\Custom\SearchProduct;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use App\Entity\User;
use Symfony\Component\Yaml\Yaml;
/**
* Class SortingDataSearchedProductService
* @package App\Services
*/
class SortingDataSearchedProductService
{
/**
* @var Security
*/
private $security;
/**
* SortingDataSearchedProductService constructor
* @param Security $security
*/
public function __construct(Security $security)
{
$this->security = $security;
}
/**
* Form Data
* @param SearchProduct $searchedData
*
* @return array
*/
public function findDataOfSearchWithConditions(SearchProduct $searchedData): array
{
/** @var User $user */
$user = $this->security->getUser();
$userPermissions = $user->getPermissions();
return $this->findStatusLinkedToGrantedRoles(
$userPermissions
);
}
/**
* Get array of final list of granted roles
*
* @param array $userPermissions
* @return array
*/
public function findStatusLinkedToGrantedRoles(array $userPermissions): array
{
//Getting the list of role linked to status from yaml file
$permissionStatusList = Yaml::parseFile(dirname(__DIR__).'/../config/roles.yaml');
$arrayPermissionListStatus = $permissionStatusList[0];
//Declaration array status list
$statusList = [];
//Getting status linked to permissions
foreach ($userPermissions as $userPermission) {
if (array_key_exists($userPermission, $arrayPermissionListStatus)) {
foreach ($arrayPermissionListStatus[$userPermission] as $status) {
array_push($statusList, $status);
}
}
}
//Deleting double values
return array_values(array_unique($statusList));
}
}
我知道我的错误是指我的表单类型文件,但在服务中,我的目标唯一链接到我的表单是$searchedData,这是我的表单提交返回的数据(我还没有使用)。因此,我不确定为什么它会通过我的表单类型文件以及为什么它不将安全性视为一个类。
我尝试在我的设置中像这样使用 MockBuilder,但它没有帮助。也许我以错误的方式使用单元测试?
$this->getMockBuilder('Symfony\Component\Security\Core\SecurityContextInterface')
->disableOriginalConstructor()
->getMock();
编辑
这是我执行转储自动加载命令后我的自动加载类映射文件中的内容:
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Collator' => $vendorDir . '/symfony/intl/Resources/stubs/Collator.php',
'IntlDateFormatter' => $vendorDir . '/symfony/intl/Resources/stubs/IntlDateFormatter.php',
'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
'Locale' => $vendorDir . '/symfony/intl/Resources/stubs/Locale.php',
'NumberFormatter' => $vendorDir . '/symfony/intl/Resources/stubs/NumberFormatter.php',
'SqlFormatter' => $vendorDir . '/jdorn/sql-formatter/lib/SqlFormatter.php',
);
如果没记错的话,它会重新生成需要包含在项目中的所有类的列表。所以这意味着安全是存在的,不是吗?
解决方案
推荐阅读
- java - Spring Boot 从 1.5.9 升级到 2.1.3 后 Log4j 为什么会失败?
- python - ImportError:无法从部分初始化的模块“keras”导入名称“__version__”(很可能是由于循环导入)
- sass - Parcel Bundler,--dontresolvepaths 的一个选项将非常有用
- android - 从 adb shell 运行自定义的 android monkey 测试
- machine-learning - 如何获得 Yolov4 模型的 MAP 分数?
- java - 访问文件 Android 11 时权限被拒绝
- apache-kafka - Kafka 中的批处理
- apache-spark - 从 nfs 位置删除超过 7 天的 Spark History Server 日志?
- css - 如何调整列表样式背景图像位置角度?
- go - 字符串和 [] 字符串有什么区别?