【问题标题】:phpunit with output buffering带输出缓冲的phpunit
【发布时间】:2015-03-25 23:08:12
【问题描述】:

我正在尝试将 PHPunit 集成到一个大项目中,一切似乎都很好,只是似乎所有依赖 ob_start() 的方法都会导致风险测试。

在线阅读,似乎有风险的测试是执行测试方法未涵盖的代码的测试。但是,我根本没有使用过@covers 注释,而且这只发生在 ob_start() 上。

所以有几个问题:

  1. 能否解决此问题?
  2. 在进行测试时,ob_start 是否存在固有问题?
  3. 有办法解决吗?(如果无法解决)。

用例是使用返回视图的框架(而不是发送到浏览器),Codeigniter 是一个经典示例,您可以在其中返回视图。返回视图取决于 ob_start()。 非常感谢!

【问题讨论】:

  • 您是否使用严格模式(检查 phpunit.xml)?
  • 我没有使用 XML,而是内联调用,我没有使用 --strict 标志。添加 --strict(即使它已被弃用)时,更多测试现在被标记为有风险
  • 我的意思是 --strict-coverage (phpunit 4.5)

标签: php testing phpunit output-buffering


【解决方案1】:

解决方案有两个方面,因为它围绕着我遇到的两个问题。

  1. 关于具体问题,在framework(codeigniter)中使用views,我只是简单的用了一个加载器的mock,所以实现了一个空函数,实际上并没有加载和输出html。
  2. 关于我对 PHPunit 行为的实际问题,如果使用 ob_start 和 ob_clean,PHPunit(4.5) 似乎会假设测试是有风险的,但是当使用 ob_get_clean 时,测试会按预期工作。我不确定为什么,因为我没有深入研究代码本身,但这为我解决了问题

【讨论】:

  • // 获取缓冲输出然后 ob_get_clean .... 谢谢!
    $out = output(); $out = ob_get_clean();
  • 感谢第二点,我正在创建一个更漂亮的 var_dump 函数:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多