【问题标题】:multiple tests clashing in phing多个测试在 phing 中发生冲突
【发布时间】:2011-03-18 16:56:26
【问题描述】:

我们有一个 Phing 脚本,Hudson 使用它来构建/测试我们的 PHP 站点。

我们的一些单元测试会加载主函数库;其他人使用模拟来避免这样做(或为测试提供特定的伪造结果)。

单元测试在单独运行时都可以完美运行(即在命令行上,使用phpunit)。但是,当我们在 Phing 中将它们作为批处理一起运行时,会出现错误。

错误出现在我们为某些功能编写模拟的测试中。该错误表明我们要声明该函数两次。它显然是在尝试包含真正的函数库以及模拟。

测试包含互斥的代码,因此它们需要彼此隔离运行;看起来 Phing 正在一个进程中运行它们,所以包含冲突。

phing 脚本的相关部分如下所示:

<phpunit haltonfailure="true" printsummary="true">
  <batchtest>
    <fileset dir="${ws}/path/to/site/root/">
      <include name="*Test.php" />
      <include name="*/*Test.php" />
      <include name="*/*/*Test.php" />
      <include name="*/*/*/*Test.php" />
    </fileset>
  </batchtest>
  <formatter type="xml" todir="${builddir}/logs" outfile="units.xml" />
</phpunit>

有没有办法让 phing 彼此独立地运行测试,而无需在构建脚本中单独指定每个测试?

【问题讨论】:

  • 单独运行时是指--process-isolation Run each test in a separate PHP process?你有 phpunit.xml 配置文件吗?
  • @Gordon - 我怀疑 Spudley 宁愿避免在单独的进程中运行 每个方法,而是在一个进程中运行所有模拟库测试和所有真实库在另一个测试。
  • @Gordon:我的意思是我不希望测试“X”失败,因为它试图通过测试“Y”包含require()d 的文件。
  • @David - 是的,这将是一个合理的解决方案。
  • 那么您是否能够使用从命令行对 phpunit 的一次调用来一次运行所有测试?还是您使用两个调用,一个用于测试真实的,一个用于测试模拟的东西?只是为了确保我能正确编辑

标签: php unit-testing phpunit phing


【解决方案1】:

嗯,最简单/最快的解决方法似乎是“不要使用 phing 任务,而是开始使用‘真正的’phpunit 输出。

所以运行&lt;exec command="phpunit ... "&gt; [...]

并使用 --coverage-html 并将其发布到 hudson 并使用 --coverage-clover 和 junit 开关将覆盖信息输入到 hudson。 (参考jenkins-php.orgSetting up jenkins for php projects (there is a demo phpunit.xml.dist)


但你可能不想这样:/

据说from the Phing docs of the phpunit task 我看不出有办法直接告诉phing 使用--process-isolation 开关。

所以也许其他人对此有解决方案。我没有一个仍然会产生代码覆盖率。

来自 cmets

我将假设您有 2 段无法在单个进程中运行的独立测试代码,所以理想的情况是您可以说:

run 2 processes: "testsuite one do that, testsuite two do the other thing"
after that aggregate the results

遗憾的是,我不知道您如何告诉 phpunit 这样做。我会进一步调查,但目前我知道唯一可以肯定的是在整个测试套件中使用--process-isolation 每个测试。如果有办法在一个单独的进程中运行整个套件,我不知道。


希望其他人对此有更简单的解决方案:)

【讨论】:

  • 这似乎就是 Phing 的工作方式。从 Phing 文档中并不清楚,但我在邮件列表中发现了一些用户提出类似问题的案例,答案往往是重命名其中一个有问题的类......这显然没有多大用处当您将它们用作模拟时。 (例如phing.tigris.org/ds/…phing.tigris.org/ds/…)。在没有更好的情况下,我会接受你的回答。感觉不太对劲。
  • 是的,如果我找到更好的方法,我会回来编辑
猜你喜欢
  • 2017-06-24
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2013-11-26
  • 2013-12-21
  • 2013-02-25
  • 2018-01-21
  • 2020-06-11
相关资源
最近更新 更多