测试查询构建器

Den*_*ink 5 php unit-testing generator

我正在构建一个我想要进行单元测试的查询构建器.
我不知道怎么回事.

它(目前)由两部分组成:QueryBuilder本身为构造查询提供了流畅的接口.并且SqlConstructor它负责构造实际的SQL.

所以基本上,我如何测试'正确性'?我应该只测试关键字的存在吗?(比如,select作为选择类型查询中的第一个关键字?)我认为要正确测试,有很多重要的事情,比如关键字出现的顺序等.

Gor*_*don 3

您测试对于给定的输入是否有预期的输出。

如果我理解正确,您的 QueryBuilder 正在收集查询部分,因此当您通过 QueryBuilder 的方法添加它们时,请确保保存这些部分的数据结构实际上包含它们。如果它有一个addWhereClause方法或类似的东西,请检查该方法是否确实执行了操作,以及您在方法主体中写入的内容,例如编写一个测试,例如

public function testWhereMethodAddsExpressionToPartsArray()
{
    $expression = 'foo = "bar"';
    $this->sut->where($expression);
    $parts = $this->sut->getParts('where');
    $this->assertContains($expression, $parts);
}
Run Code Online (Sandbox Code Playgroud)

对于 SqlConstructor 执行相同的操作,测试它从您用 QueryBuilder 填充的数据结构获取的输入(您可能想为此模拟它)是否会产生预期的输出。

如果您想测试 SQL 的实际有效性,请为此编写一个单独的测试用例。请记住,UnitTest 的目的不是确保 SQL 正确,而是 SQLGenerator 按照您指定的方式生成 SQL。

验证 SQL 时的问题是,SQL 很复杂。它有正式的语法。您的测试用例将涵盖多少语法?为 SQL 编写一个解析器对我来说听起来不太可行,更不用说一个完整的解析器了。

有关的: