关于php:PHPUnit – 使用配置文件时’没有执行测试’

PHPUnit - 'No tests executed' when using configuration file

问题

为了提高我的代码质量,我决定尝试学习如何使用单元测试而不是我最平庸的测试解决方案来测试我的代码。

我决定使用composer安装PHPUnit,用于个人库,允许我实现常见的数据库功能。起初我没有PHPUnit的配置文件,当我运行以下命令:

1
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

请注意,这是一个终端命令,因此我没有包含.php扩展名。上面提到的GeneralStringFunctionsTest实际上是一个GeneralStringFunctionsTest.php文件。

输出是我的预期:

Time: 31 ms, Memory: 2.75Mb

OK (1 test, 1 assertion)

然后,我尝试使用配置文件自动加载测试套件,而不必每次都手动输入文件。我在我的根目录中创建了一个名为phpunit.xml的文件,并在文件中输入以下内容:http://pastebin.com/0j0L4WBD:

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/文件夹中的PHP文件命名如下:

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 {...}


你只需要从供应商文件中调用它

vendor\bin\phpunit注意不是/


在我决定使用--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 artisan make:test时,我意外地将.php设置为ProductRewardPointController.php,其中创建了ProductRewardPointController.php.php并且phpunit完全忽略了它。

我只是删除额外的.php和事情恢复正常


使用de cmd控制台解决了传递enterely路径的问题
测试实现了

我没有找到另一种方法来做到这一点
它不能以这种方式工作

我希望这对某人有帮助