我有一个带有postLoad
方法的EntityListener,如下所示:
public function postLoad(AntragInterface $antrag): void
{
if ($antrag->getDataRaw()) {
$data = $this->serializer->denormalize(
$antrag->getDataRaw(),
$this->dataClass,
);
$antrag->setData($data);
} else {
$antrag->setData(new $this->dataClass());
}
}
我在构造函数中注入序列化程序:
public function __construct(
private Security $security,
protected SerializerInterface $serializer,
protected string $dataClass,
) {}
dataRaw
是maria db中的一个json字段。该值通过doctrine转换为一个关联数组。然后该数组应该被反规范化为$this->dataClass
中类的一个Object。这在应用程序中工作得很好。
但是当我用phpunit运行集成测试时,序列化器似乎没有正确初始化,它说它没有Normalizer,当我在services_test.yaml中为标签serializer.normalizer
定义一个normalizer时,它似乎仍然没有propertyTypeExtractor
。
对于我的测试类,我扩展了KernelTestCase
。在我的setUp
方法中,我扩展了self::bootKernel()
。
如何才能使我的集成测试与正确配置的序列化程序一起工作?
1条答案
按热度按时间w8f9ii691#
我发现了问题。我在
services_test.yaml
中将串行化程序标记为public,如下所示:这似乎会扰乱服务的示例化。我不知道如何将序列化器标记为public,同时获得一个工作示例。但我不一定需要它作为公共服务,所以我只是删除了public标记。
如果有人知道如何在
services_test.yaml
中将序列化器标记为public,同时获得一个工作示例,那么这个解决方案将非常受欢迎。