亲爱的stackoverflowers, 我们正在开发基于cakephp的Web应用程序。 CakePHP在TDD方式中有点难以使用,因此我们试图通过将所有业务逻辑提取到不依赖于cakephp的类来自己在框架上开发尽可能少的代码。因此,我们能够使用phpunit测试我们的库,只需要很少的问题。但是,我们确实希望在我们的覆盖率报告中包含未经测试的代码,以便密切关注蛋糕和我们无法测试的库之间的胶水代码量。问题是,当告诉phpunit考虑这些代码时,它会疯狂地解析并执行cakephp的代码并且它会惨遭打破。 我的问题是:为什么phpunit会执行这个代码?我们在这里有什么不理解或做错的事吗? 这是我们正在使用的phpunit.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<phpunit backupGlobals="true"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">app</directory>
<exclude>
<directory suffix=".php">tests</directory>
<directory suffix=".php">app/webroot</directory>
<directory suffix=".php">app/plugins</directory>
<directory suffix=".php">app/vendors</directory>
<directory suffix=".php">app/config</directory>
<directory suffix=".php">app/tmp</directory>
<directory suffix=".php">cake</directory>
<directory suffix=".php">vendors</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
感谢您的帮助。
答案 0 :(得分:3)
您需要将cakephp文件添加到blacklist。您应该可以在xml配置文件中执行此操作:
<filter>
<blacklist>
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
<exclude>
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
</exclude>
</blacklist>
</filter>
还有更多信息here
答案 1 :(得分:0)
为什么phpunit会执行这个代码呢?
这样做是因为它需要获取有关未涵盖的类,方法和函数的信息。它包含它找到的文件,并使用Reflection来发现有关类的所有信息。这比手动解析和分析PHP文件的parsed tokens更容易。