gpt4 book ai didi

php - 测试查询构建器

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:56 26 4
gpt4 key购买 nike

我正在构建一个我想进行单元测试的查询生成器。
不过我不知道该怎么做。

它(目前)由两部分组成:QueryBuilder 本身,它为构造查询提供了流畅的界面。以及负责构建实际 SQL 的 SqlConstructor

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

最佳答案

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

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

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

对于 SqlConstructor 做同样的事情,测试它从你用 QueryBuilder 填充的数据结构获得的输入(你可能想为此模拟它)产生预期的输出。

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

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

相关:

关于php - 测试查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com