每次我运行一个类或整个文件夹的单元测试时,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。
从PHPUnit 5.6手册:
可以在测试代码中使用@covers注释(参见表B.1)来指定测试方法要测试的方法。如果提供,则仅考虑指定方法的代码覆盖率信息。例11.2显示了一个例子。
这对你的场景有用吗?
您需要将addUncoveredFilesFromWhitelist
参数设置为false
:
<filter>
<whitelist addUncoveredFilesFromWhitelist="false">
<directory>../module/Module1</directory>
<directory>../module/Module2</directory>
<directory>../module/Module3</directory>
</whitelist>
</filter>
有关this answer和addUncoveredFilesFromWhitelist
参数的解释,请参阅processUncoveredFilesFromWhitelist
。
像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>