【发布时间】:2017-02-10 01:28:33
【问题描述】:
我有一个 3.1.12 版的网站,使用的是 0.92 版的 postgres 模块。
我刚刚将所有内容分别升级到 3.5.3 和 1.2。一切都很好,除了我现有和未更改的单元测试中的一些奇怪行为。当测试以编程方式创建对象时似乎会发生,如下所示:
$page=new Page();
$page->Title='Read only success';
$page->write();
在 3.1 和 0.92 上,测试将运行,然后返回成功。在 tmp 数据库中完成上述工作。
升级后相同的测试,不做任何修改,运行并返回成功。只有这一次,工作是在当前的实时数据库中完成的。在上述情况下,我的管理站点树中有一个新的草稿页面。
有人见过这个吗?我已经竭尽全力寻找答案和追踪究竟是什么导致了这种非常危险的行为。
【问题讨论】:
-
除非您测试特定的 Postgres 功能,否则我建议在内存 sqlite 中使用以加快测试速度,请参阅 silverstrip.es/blog/how-to-speed-up-unit-tests-using-sqlite
-
感谢您的链接。看起来很有趣!
-
我实际上不同意使用备用 RDBMS。如果您有一个 Postgres 支持的应用程序,并且您的应用程序依赖于存在的数据库(SilverStripe 确实如此),那么根据正在运行的测试的性质(集成/行为/单元),您应该测试一个 postgres 支持的应用程序,不是 SQLite 支持的应用程序。
标签: php silverstripe