首页 > 解决方案 > 如何测试自定义 DQL 功能?

问题描述

我根据本教程编写了一个自定义 DQL 函数。 我想写一些测试,但是 DQL 的功能相当复杂。

有什么方法可以测试吗?

如我所见,即使是学说项目也不会测试自己的 DQL 函数 :(

标签: phpdoctrinedql

解决方案


我知道这是一个老问题,但对于像我一样关注它的人来说。

测试其实很简单。一般的想法是使用您的自定义功能生成查询,然后将其与预期结果进行比较。这是示例。

假设您有一个自定义 DQL 函数,它将 MY_FUNC(field) 转换为 MySQL_INTERNAL_FUNC(field)。然后你测试它如下。

/* Somewhere in the PHPUnit test */
/* Assuming $em represents your EntityManager instance */
$query = $em->createQuery('
    SELECT MY_FUNC(entity.someField)
    FROM MyBundle:MyEntity entity
');
self::assertEquals('
    SELECT MySQL_INTERNAL_FUNC(v0_.some_field) AS sclr_0
    FROM my_entity v0_
', $query->getSQL());

这就是诀窍。注意缩进。他们在那里只是为了使代码清晰。在实践中,Doctrine 将删除他们制作 SQL。所以预期的 SQL 代码应该在一行中。


推荐阅读