如何让PHPUnit排除测试路径中的.svn目录?
从phpunit.xml如何使phpunit不在.svn目录中搜索?在大型项目中,随着.svn目录数量的增加,这将成为一个更大的问题 我的当前配置:如何让PHPUnit排除测试路径中的.svn目录?,php,phpunit,autoload,Php,Phpunit,Autoload,从phpunit.xml如何使phpunit不在.svn目录中搜索?在大型项目中,随着.svn目录数量的增加,这将成为一个更大的问题 我的当前配置: <?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="phpunit_bootstrap.php" colors="true" convertErrorsToExceptions="true" convertNoticesToException
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="phpunit_bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
syntaxCheck="true"
verbose="true"
strict="true">
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./phpunit/</directory>
<exclude>
<directory>./phpunit/.svn</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
是否可以将.svn目录列入黑名单?最好使用通配符指令,这样我就不必指定每个.svn目录的绝对路径(例如,
.svn
)目前没有办法告诉PHPUnit
不扫描与特定表达式匹配的目录或忽略隐藏的目录
因此,目前您必须
每一个svn目录
只是重申一下评论中所说的:这只是在处理非常慢的文件系统时的一个问题,这些文件系统需要花费大量时间进行stat和read调用
这就是为什么我会假设用例是如此有限,以至于在phpunit中构建一个.svn ignore是不值得的,特别是因为较新的svn版本不再将dir放在任何地方。(见可能的解决方案2)
可能的解决方案:
列出所有排除项
也许编写一个从文件中生成排除标记的小脚本不是什么大问题
find . | grep -e ".svn$" | sed 's/^/<directory>/' | sed 's/$/<\/directory>/'
find.|grep-e“.svn$”| sed's/^/'| sed's/$/'
例如,将为您提供所有要粘贴的include标记的列表。或者使用基于文档的小脚本就地更新文件:)
升级到Subversion 1.7。
这会将所有元数据存储在项目根目录中的一个目录中,因此您的
项目/tests
文件夹中不会有文件供phpunit扫描并解决此问题。这可能有些过分,但我确实想要一个更好的解决方案
下面是php\PEAR\File\Iterator\Factory.php文件的一个补丁,它是所有这些缓慢的原因。它跳过不以字母或数字开头的目录。取悦于
108110c108
<新递归迭代器(
新的递归迭代器(新的递归迭代器(新的递归目录迭代器($path,递归目录迭代器::FOLLOW\u符号链接),'=\\\\[a-zA-Z0-9]=',true),
我有一个项目,在svn的+300个文件夹中有+5000个类/文件,phpunit会进行扫描,直到执行第一个测试大约需要半秒钟。你能详细解释一下为什么这对你来说是个问题吗?:)我正在一个网络上工作,该网络与NAS服务的机器进行对话。谢谢,回答得很好。我不知道SVN1.7将其元数据布局更改为类似于git的内容。我可能不得不申请升级!
find . | grep -e ".svn$" | sed 's/^/<directory>/' | sed 's/$/<\/directory>/'
108,110c108
< new RecursiveIteratorIterator(
< new RecursiveDirectoryIterator($path)
< ),
---
> new RecursiveIteratorIterator(new RecursiveRegexIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::FOLLOW_SYMLINKS), '=\\\\[a-zA-Z0-9]='), true),