2016-10-27 2 views
7

Каждый раз, когда я запускаю модульные тесты одного класса или всей папки, phpunit генерирует покрытие для всей системы, потому что это настроено в phpunit.xml.
Это плохо, потому что это занимает больше времени и исчерпывает память PHP.Создайте покрытие только того, что было протестировано

Мой phpunit.xml

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html --> 
<phpunit 
    backupGlobals    = "false" 
    backupStaticAttributes  = "false" 
    colors      = "true" 
    convertErrorsToExceptions = "true" 
    convertNoticesToExceptions = "true" 
    convertWarningsToExceptions = "true" 
    processIsolation   = "false" 
    stopOnFailure    = "false" 
    syntaxCheck     = "false" 
    bootstrap     = "Bootstrap.php" > 

    <testsuites> 
     <testsuite name="Application Module Suite Test"> 
      <directory>./Module1Test</directory> 
      <directory>./Module2Test</directory> 
      <directory>./Module3Test</directory> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <whitelist> 
      <directory>../module/Module1</directory> 
      <directory>../module/Module2</directory> 
      <directory>../module/Module3</directory> 
     </whitelist> 
    </filter> 

</phpunit> 

Есть ли способ, чтобы произвести освещение только то, что я тестирую прямо сейчас, динамически?

Пример
Для команды ниже я хотел бы произвести охват только для Controller/ExampleController.php пути.

phpunit Controller/ExampleController.php --coverage-html ~/Desktop/tests 

Я использую PHPUnit 4.8 и 3.7, Sublime Text Editor и приложение использует Zend Framework 2.

ответ

0

добавить processUncoveredFilesFromWhitelist параметр в True как в https://phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.whitelisting-files

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
     <directory>../module/Module1</directory> 
     <directory>../module/Module2</directory> 
     <directory>../module/Module3</directory> 
    </whitelist> 
</filter> 
+2

Если я запустил phpunit для определенного контроллера Module1, покрытие все еще генерирует для всех трех модулей. –

+0

Что делать, если вы белеете файл вместо каталога? – Aditija

+2

Возможно, это сработает, но я хочу динамическое решение, поэтому мне не нужно постоянно менять phpunit.xml. –

1

От PHPUnit версия 5.6:

Аннотации @covers (см. таблицу B.1), можно использовать в тестовом коде, чтобы указать, какой метод (ы) тестирует метод тестирования. Если предоставлено, будет рассмотрена только информация о покрытии кода для указанного метода (ов). Пример 11.2 показывает пример.

Смотрите эту ссылку для примера: https://phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis.specifying-covered-methods.examples.BankAccountTest.php

Может ли это быть полезным для вашего сценария?

+1

Не совсем, потому что мне пришлось бы вручную добавлять/удалять эту аннотацию из многих методов тестирования каждый раз, когда меняю классы, я думаю, что что-то вроде параметра командной строки будет более динамичным. –