【发布时间】: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