php - 您将如何测试一个可以向查询添加数十个不同过滤器的类?

标签 php mysql unit-testing doctrine-orm

如果我们尝试对所有内容进行单元测试,我正在尝试将页面从旧系统迁移到新系统。

该页面包含大约 40 个高级搜索过滤器,用于在我们的产品表及其相关表中进行搜索。

其中一些是简单的字段搜索,但其他则创建新的联接或子查询。

我不知道如何对存储库进行单元测试,该方法接收用户提供的过滤器数组并应返回相应的产品,其中使用 Doctrine ORM 和 DQL 来生成所有查询。

我认为以下几点:

  • 单元测试一一过滤
    • 问题:进行了大量测试,但未涵盖过滤器混合在一起的情况。
  • 将输出的 MySQL 代码与预期输出进行比较
    • 问题:不灵活,未测试实际结果。

那么您将如何进行测试呢?

最佳答案

除非你能保证代码的顺序,否则检查MySQL代码是否符合预期将需要很长时间来检查。相反,您可以:

  1. 单独添加每个过滤器。检查查询是否符合预期,并且它将执行。最好检查记录是否有预期记录
  2. 将多个项目添加在一起。检查查询是否至少包含您希望添加的代码(因此您不必保证添加的顺序),并且查询是否执行。

对于第 2 部分,如果您可以自动运行检查,那就更好了。检查所有可能的添加几乎是不可能的,因为从仅选择 1 个过滤器到选择所有 40 个过滤器,共有 1,099,511,627,775 种组合。每一个组合都需要进行测试,以生成包含您期望的内容的 SQL,但也能正确运行。

有时,对所有内容进行单元测试是不可能的。有时你必须测试“足够”,无论你如何衡量。

关于php - 您将如何测试一个可以向查询添加数十个不同过滤器的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50626484/

相关文章:

与 LMS 兼容的 PHP 创作工具

visual-studio - 运行 Visual Studio ASP.NET 单元测试时出现 500 错误

php - 如何在不减速的情况下从 mysql 表中删除数百万条记录

php - 将 N 小时添加到 MySQL 日期时间表示

javascript - 如何根据用户按下的按钮从数据库中删除购物车行

mysql - 连接到在 Windows 10 上运行 mysql 的 Docker 容器

mysql - 监视数据库更改的免费工具?

c# - ClassInitialize : no longer working in Visual Studio 2012 中生成的数据驱动测试

c# - 如何在 .net 中使用 C# 对默认构造函数类进行单元测试?

php - jQuery,更新正确的字段