2010-09-19 158 views
1

我们在我们的应用程序中使用APC用户缓存,但是我们已经开始注意到与APC测试专门相关的单元测试中的各种问题。PHP APC在单元测试中失败

看来最终APC开始无法存储和检索结果;而大多数测试继续正常运行(因为它们只是重建数据,如果它没有从缓存中恢复的话),专门测试缓存的测试在应该失败时被清空或重新填充,这有点令人讨厌。如果它们单独运行,而不是作为整个测试套件的一部分运行,那么相同的测试运行良好)。

问题

  • 任何人都有类似的问题?除了slam_defence设置打破单元测试(这似乎不是我的问题,因为它没有显示任何错误消息),我似乎无法通过谷歌找到很多。
  • 有谁知道如何从APC获得更多的调试信息?我通过检查apc_store()的返回代码并将额外的成功参数传递给apc_fetch()来检测失败,但是我得到的所有结果都是布尔成功/失败状态;没有关于我可以跟进的细节。

回答

2

我的猜测是缓存可能已满。在你的应用程序中,这是你应该能够处理的事情(永远不要假定这些项目存在于缓存中)。我不知道APC如何缓存或过期,所以奇怪的是'后来的东西'不被保留。

在你的unittests的情况下,每个测试工作都会调用apc_clear_cache('user')吗?

+0

这是一个很好的想法,但为了确保每个测试的状态都相同,我们已经在setUp调用中为每个测试调用了apc_clear_cache('user')。 – 2010-09-19 02:59:44

+0

如果这是真的,那么我会看看是否可以得到一个持续触发问题并报告错误的简短脚本。 – Evert 2010-09-19 20:01:50

+0

其实,事实证明你或多或少是正确的。问题发生是因为缓存已满,尽管我们尝试将其清空。调用apc_clear_cache无法释放内存;即使对每个项目调用apc_delete也无法释放内存。有关于此的任何想法? – 2010-10-18 21:13:28