PHPUnit - 'No tests executed' when using configuration file
为了提高我的代码质量,我决定尝试学习如何使用单元测试而不是我最平庸的测试解决方案来测试我的代码。
我决定使用composer安装PHPUnit,用于个人库,允许我实现常见的数据库功能。起初我没有PHPUnit的配置文件,当我运行以下命令:
1 | $ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest |
请注意,这是一个终端命令,因此我没有包含
输出是我的预期:
Time: 31 ms, Memory: 2.75Mb
OK (1 test, 1 assertion)
然后,我尝试使用配置文件自动加载测试套件,而不必每次都手动输入文件。我在我的根目录中创建了一个名为
1 2 3 4 5 6 7 8 | <?xml version ="1.0" encoding="UTF-8" ?> <phpunit> <testsuites> <testsuite name="Tests"> <directory>tests</directory> </testsuite> </testsuites> </phpunit> |
现在,当我运行命令时:
1 | phpunit |
我得到以下输出:
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Time: 16 ms, Memory: 1.50Mb
No tests executed!
如果它有用,我的目录结构如下:
src - 顶级目录(包含我的所有源代码)
tests - 顶级目录(包含我的所有测试,结构与我的src文件夹相同)
供应商 - Composer第三方文件
我还有作曲家json和锁定文件,以及顶层的phpunit xml文件作为文件。
我试过的事情
-
将
phpunit.xml 中的目录更改为tests/GeneralStringFunctions -
将
phpunit.xml 中的目录更改为./tests -
将
phpunit.xml 文件移动到tests 目录,然后将目录更改为./ 而不是tests 。 -
将后缀属性添加到
phpunit.xml 中的目录标记,以将"测试"指定为显式后缀。
为了它的价值(迟到),我最近遇到了这个问题,而我正在为一个简单的网站制作一个新的Laravel 5.1项目。我尝试调试它,当我尝试时感到困惑:
1 | php artisan make:test homeTest |
(它有一个只是断言为true的默认测试是真的)
并看到了输出
1 | No tests executed! |
问题最终对我而言与我的PHP安装有关 -"phpunit"是全局注册和配置不同,而Laravel安装附带的phpunit配置恰到好处并完美运行。
因此修复程序正在运行供应商配置的phpunit(与app /和tests /相同的根目录):
1 | ./vendor/bin/phpunit |
希望能帮助别人!
您的XML文件很好。但是,您必须确保
tests / Test.php <---注意大写"T" 测试/ userTest.php 测试/ fooBarTest.php 等等
文件名必须以"Test.php"结尾。这就是PHPUnit在目录中寻找的东西。
此外,每个测试方法都必须具有以"test"开头的名称:
1 2 3 4 | public function testFooBar() { // Your test code } |
希望有所帮助!
在Windows上,在终端上使用以下命令
1 | .\vendor\bin\phpunit |
那是命令
1 | phpunit |
返回"没有执行测试!"
在Mac上
1 | ./vendor/bin/phpunit |
希望能帮助到你。
我的虚拟机上的PHPUnit更新到版本6后,我遇到了同样的问题。甚至--debug和--verbose没有任何用处,只是"没有执行测试"。最后,事实证明在新版本中更改了类和命名空间,它只是不想执行包含对旧类的引用的文件。我的修复只是在每个测试用例中替换:
1 | class MyTestCase extends \PHPUnit_Framework_TestCase {...} |
有:
1 2 3 | use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...} |
你只需要从供应商文件中调用它
在我决定使用--debug(顺便说一句)之前,我把头发拉了10分钟,发现一个简单的事实,即文件名不符合命名惯例,我最后还有一个额外的"s" 。
错误
1 | CreateAdminTests |
对
1 | CreateAdminTest |
希望这张纸可以帮助某人
我意识到这是超级老,但它也发生在我身上。希望这会对某人有所帮助。
我的问题是我在/ ** @test * /中忘记了'@'符号
错误:
1 2 3 4 5 | /** test */ function a_thread_can_be_deleted() { ... } |
对:
1 2 3 4 5 | /** @test */ function a_thread_can_be_deleted() { ... } |
如果您正在使用PHPSTORM,请转到"设置"然后转到
-
Test Frameworks 然后单击+并选择
-
PHPUnit Local 然后 -
Use Composer Auto Loader
然后将其粘贴到脚本字段的路径中 -
C:\{YOUR PROJECT NAME}\vendor\autoload.php - 单击确定
-
HAPPY TESTING
你有没有为你的phpunit.xml文件添加一个测试套件?
1 2 3 4 5 | <phpunit> <testsuite name="app1"> <directory>./</directory> </testsuite> </phpunit> |
您可以在其中添加多个目录。
我有同样的问题没有执行测试!,通过保持文件和类名的相同名称解决。
这是很晚但我希望它可以帮助某人。
我通过使用绝对引用让我的测试运行。
文件夹结构[project / tests / test.php]
我的目录行看起来像这样./tests/test.php
也许有一点点,但如果你(像我一样)在Vagrant中使用Laravel,请确保你在流浪盒内运行phpunit而不是在"windows side"。 :)
对我来说,使用phpunit --debug告诉我它没有执行哪个测试,
在里面,我有
1 2 | $this->visit('/') ->see('Laravel'); |
我认为因为该目录受.htaccess身份验证保护,所以无法访问该页面
我的解决方案是取出这个测试(或者最有可能取出.htaccess认证)
即使事情设置得很好,我也没有执行任何测试的问题。
原因是命名空间不是文件的第一个命令,它是在一些doc-block注释之后。
还原导致phpunit看到测试并正确运行。
我有点好笑。
当我使用
我只是删除额外的.php和事情恢复正常
使用de cmd控制台解决了传递enterely路径的问题
测试实现了
我没有找到另一种方法来做到这一点
它不能以这种方式工作
我希望这对某人有帮助