【发布时间】:2020-09-03 21:43:41
【问题描述】:
我在使用 FOSRestBundle 和 JMSSserializer 在 Symfony 4.4 中测试我的控制器时遇到了问题。我的控制器非常简单,通常只包含对其他服务的调用,但我正在使用 ParamConverter、Serializer、Deserializer 等。我不确定返回的字段是否是我期望的。
我想测试序列化/反序列化如何处理我的实体。每当我在实体中添加字段或更改字段组时,测试都会失败。
理想情况下,我会模拟我的服务并直接调用 Action,但我在任何地方都找不到,如何调用所有注释触发的 Action 方法。
除了对整个请求进行功能测试之外,还有其他测试方法吗?
我要测试的控制器动作:
/**
* @Rest\Post("/entity")
* @Rest\Put("/entity/{entityId<\d+>?}")
* @ParamConverter(name="entity", converter="app.request_body",options={
* "deserializationContext"={"groups"={
* "DetailsGroup",
* "nested"={"IdGroup"},
* "owner"={"IdGroup"}
* }}
* }
* )
* @Rest\View(serializerGroups={"IdGroup"}, statusCode=Response::HTTP_CREATED)
* @param int|null $entityId
* @param Entity $entity
* @param ConstraintViolationListInterface $validationErrors
* @return Entity
* @throws InvalidArgumentException
* @throws Exception
*/
public function setEntityAction(?int $entityId, Entity $entity, ConstraintViolationListInterface $validationErrors): Entity
{
if ($validationErrors->count() > 0) {
throw new InvalidArgumentException('...');
}
return $this->entityService->setEntity($entity, $this->getUser());
}
【问题讨论】:
-
到目前为止您尝试过什么?你被困在哪里了?为什么不编写一个期望给定输出的测试用例?
标签: php unit-testing symfony functional-testing fosrestbundle