如果我们尝试对所有内容进行单元测试,我正在尝试将页面从旧系统迁移到新系统。
该页面包含大约 40 个高级搜索过滤器,用于在我们的产品表及其相关表中进行搜索。
其中一些是简单的字段搜索,但其他则创建新的联接或子查询。
我不知道如何对存储库进行单元测试,该方法接收用户提供的过滤器数组并应返回相应的产品,其中使用 Doctrine ORM 和 DQL 来生成所有查询。
我认为以下几点:
- 单元测试一一过滤
- 问题:进行了大量测试,但未涵盖过滤器混合在一起的情况。
- 将输出的 MySQL 代码与预期输出进行比较
- 问题:不灵活,未测试实际结果。
那么您将如何进行测试呢?
最佳答案
除非你能保证代码的顺序,否则检查MySQL代码是否符合预期将需要很长时间来检查。相反,您可以:
- 单独添加每个过滤器。检查查询是否符合预期,并且它将执行。最好检查记录是否有预期记录
- 将多个项目添加在一起。检查查询是否至少包含您希望添加的代码(因此您不必保证添加的顺序),并且查询是否执行。
对于第 2 部分,如果您可以自动运行检查,那就更好了。检查所有可能的添加几乎是不可能的,因为从仅选择 1 个过滤器到选择所有 40 个过滤器,共有 1,099,511,627,775 种组合。每一个组合都需要进行测试,以生成包含您期望的内容的 SQL,但也能正确运行。
有时,对所有内容进行单元测试是不可能的。有时你必须测试“足够”,无论你如何衡量。
关于php - 您将如何测试一个可以向查询添加数十个不同过滤器的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50626484/