【问题标题】:Unit tests producing different results when using PostgreSQL使用 PostgreSQL 时单元测试产生不同的结果
【发布时间】:2019-10-31 07:06:20
【问题描述】:

一直在开发一个在使用 MySQL 时运行良好的模块,但是当我尝试运行单元测试时,在 PostgreSQL 下(使用 Travis)进行测试时出现错误。

模块本身在这里:https://github.com/silvercommerce/taxable-currency

这里是一个失败的构建示例:https://travis-ci.org/silvercommerce/taxable-currency/jobs/546838724

我没有大量使用 PostgreSQL 的经验,但我不确定为什么会发生这种情况?我认为可能导致这种情况的唯一原因是我试图在我的设备文件中手动设置 ID,也许 PostgreSQL 不支持这个?

如果不是这样,有没有人知道是什么导致了这个问题?

编辑:我再次对此进行了调查,错误似乎是因为this assertion,它应该找到税率vat,但找到了税率reduced

我猜我的逻辑中存在导致返回错误率的问题,但我不确定为什么...

【问题讨论】:

  • 您得到哪些与预期不同的结果?哪些陈述为您提供了这些结果?
  • 添加了包含更多细节的编辑。

标签: postgresql phpunit silverstripe silverstripe-4


【解决方案1】:

最后,Postgres 的默认排序似乎与 MySQL (https://www.postgresql.org/docs/9.1/queries-order.html) 不同。感兴趣的线是:

这种情况下的实际顺序将取决于扫描和连接计划类型以及磁盘上的顺序,但不能依赖它

最后我真的不需要测试包含多个项目的列表,所以我只是删除了其他项目。

如果您正在处理需要支持 MySQL 和 Postgres 的工作,您可能需要考虑将一致的排序顺序定义为查询的一部分。

【讨论】:

  • 我们偶尔会在 SilverStripe 支持的模块中遇到与 PGSQL 排序不一致的情况,并且经常将断言抽象一点,以便项目的顺序无关紧要。大多数情况下,您可以将排序留给数据库引擎并跳过对其进行测试。
  • 是的,这就是我所做的,顺序对于这个特定的测试并不重要。为澄清@RobbieAverill 欢呼
猜你喜欢
  • 2018-12-31
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2014-06-03
  • 2018-05-23
相关资源
最近更新 更多