2010-11-24 2 views
4

Дорогой stackoverflowers, Мы разрабатываем веб-приложение на основе cakephp. CakePHP оказывается немного трудным для использования в TDD-манере, и поэтому мы пытаемся разработать наименьшее количество кода, которое возможно для самой структуры, путем извлечения всей бизнес-логики в классы, которые не зависят от cakephp. Таким образом, мы можем протестировать наши библиотеки с помощью phpunit с минимальными проблемами. Однако мы хотим включить непроверенный код в наш отчет о покрытии больше, чем что-либо, чтобы следить за количеством кода клея между пирогом и нашими библиотеками, которые мы не можем проверить. Проблема заключается в том, что когда вы говорите phpunit для учета этого кода, он сумасшедший разбор и выполнение кода cakephp, и он ломается с треском. Мой вопрос: Почему phpunit выполняет этот код вообще? Что-то мы не понимаем и не делаем здесь неправильно? Вот файл phpunit.xml мы используем:Почему PHPUnit выполняет код при создании отчета о покрытии?

<?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> 

Спасибо за любую помощь.

ответ

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

Спасибо timmow. Я сделал это, и он закончил работать нормально. Наиболее важной деталью является путь, связанный с каталогом тестов, а не с корнем базы кода, с которой работает сборка муравьев. Это недокументированная деталь, которая могла бы спасти меня! – edovale 2011-01-20 04:31:43

0

Почему PHPUnit выполнения этого кода на всех?

Это делается потому, что ему необходимо получить информацию о классах, методах и функциях, которые также не охвачены. Он содержит файлы, которые он находит, и использует Reflection, чтобы узнать всю информацию о классах. Это проще, чем вручную анализировать и анализировать файл parsed tokens файла PHP.