代码之家  ›  专栏  ›  技术社区  ›  Dennis Haarbrink

测试查询生成器

  •  5
  • Dennis Haarbrink  · 技术社区  · 14 年前


    但我不知道该怎么办。

    QueryBuilder 它本身为构造查询提供了一个流畅的接口。和一个 SqlConstructor 它负责构造实际的SQL。

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   Gordon Haim Evgi    14 年前

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

    如果我理解正确,您的QueryBuilder正在收集查询部分,那么请确保在通过QueryBuilder的方法添加这些部分时,包含这些部分的数据结构实际包含它们。如果它有一个 addWhereClause 方法或类似的方法,检查方法是否确实执行了,您在方法体中写入了什么,例如,编写一个

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

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

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

    相关: