单元测试套件的内存可以用多少钱?

时间:2011-10-10 10:22:58

标签: php unit-testing memory-leaks tdd phpunit

我有约700次测试~1500次断言,测试在RAM驱动器上的sqlite上运行。我使用phpunit /dir/name运行此操作,无需任何其他套件设置。

测试编写得很好(我希望如此),应用程序和每个测试都运行得很快,每个测试的内存使用量都不大(从不超过10M)。

一旦测试分开运行,一切都会好的。但是,当我一起运行所有测试时, PHPUnit报告内存使用量约为450MB。

  • 500M好吗?我应该将memory_limit更新为700MB才能安全吗?
  • 如何避免这样的内存使用?

我理解应用程序的答案是依赖,但我想知道哪个内存级别可以测试中级应用程序覆盖率。

更新

我们在tearDown()

中使用了事务和回滚数据库更改

2 个答案:

答案 0 :(得分:3)

PHPUnit在运行任何测试之前,为每个测试方法和每个数据提供程序的每个参数数组实例化一个测试用例。要引导,任何异常和断言失败都会引用抛出它的实例。这使得在tearDown()中取消分配给测试的任何实例变量非常重要,正如MasterCassim所说。

但它主要意味着随着测试次数的增加,你必须接受不断增长的内存需求。如果你生成代码覆盖率,那么这会大大增加。我们的主要网站项目限制为2GB。

您可以在单独的流程中运行测试,但是您会在增加的运行时间内付出高昂的代价。

注意: Issue #10应该解决这个问题,但我不知道它在3.6中的状态。

答案 1 :(得分:1)

如果你一起运行测试,你必须使用tearDown()方法来“释放”内存。