PHPUnit-和#x27;未执行任何测试';使用配置文件时 问题

PHPUnit-和#x27;未执行任何测试';使用配置文件时 问题,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,为了提高我的代码质量,我决定尝试学习如何使用单元测试来测试我的代码,而不是使用最好的测试解决方案 我决定使用composer为个人库安装PHPUnit,它允许我实现常见的数据库功能。起初,我没有PHPUnit的配置文件,当我运行以下命令时: $ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest 请注意,这是一个终端命令,因此我没有包括.php扩展名。上面提到的GeneralStringFunctionsTest实际上

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

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

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

输出是我所期望的:

时间:31毫秒,内存:2.75Mb

OK(1个测试,1个断言)

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

我得到以下输出:

Sebastian Bergmann和贡献者的PHPUnit 4.5.0

从/Users/muyiwa/Projects/DatabaseHelper/phpunit.xml读取配置

时间:16毫秒,内存:1.50Mb

没有执行任何测试

如果有帮助,我的目录结构如下:
src-顶级目录(包含我所有的源代码)
测试-顶级目录(包含所有我的测试,结构与我的src文件夹相同)
供应商-编写器第三方文件

我还有composer json和lock文件,以及作为文件的顶层phpunit xml文件

我尝试过的事情
  • phpunit.xml
    中的目录更改为
    tests/GeneralStringFunctions
  • phpunit.xml
    中的目录更改为
    /tests
  • phpunit.xml
    文件移动到
    tests
    目录,然后将目录更改为
    /
    而不是
    tests
  • phpunit.xml
    中的目录标记添加后缀属性,以指定“Tests”作为显式后缀

您是否已将测试套件添加到phpunit.xml文件中

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

./

您可以在其中添加多个目录。

您的XML文件目前状态良好。但是,您必须确保
tests/
文件夹中的PHP文件命名如下:

tests/Test.php对于我来说,使用phpunit--debug向我展示了它没有执行的测试, 在里面,我有

$this->visit('/')
         ->see('Laravel');
我认为,由于目录受到.htaccess身份验证的保护,它无法访问该页面

对我来说,解决方案是取消这个测试(或者最有可能是取消.htaccess身份验证)

因为它值得(迟到),我最近在为一个简单的网站制作一个新的Laravel 5.1项目时遇到了这个问题。我试图调试它,但在尝试时感到困惑:

php artisan make:test homeTest
(它有一个默认测试,该测试仅断言true为true)

看到了输出

No tests executed!
我最终遇到的问题与我的PHP安装有关——“phpunit”是全局注册的,配置方式不同,而Laravel安装附带的phpunit配置正确,运行完美

因此,修复程序正在运行供应商配置的phpunit(从与app/和tests/相同的根目录):


希望这能帮助别人

在虚拟机上的PHPUnit更新到版本6后,我也遇到了同样的问题。甚至--debug和--verbose也没说什么有用的话,只是“没有执行测试”。最后,新版本中的类和名称空间发生了更改,它只是不想执行包含对旧类的引用的文件。对我来说,解决方法就是在每个测试用例中替换以下内容:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}
与:


使用de cmd控制台解决了通过enterely路径的此问题

我没有找到别的办法


我希望这对某人有帮助

我意识到这太古老了,但它也发生在我身上。希望这能帮助一些人

我的问题是我忘记了测试中的“@”符号*/

错:

/** test */
function a_thread_can_be_deleted()
{
    ...
}
对:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}
我的有点滑稽

当我使用
php artisan make:test
时,我意外地将.php放在了
ProductRewardPointController.php
中,它创建了
ProductRewardPointController.php.php
phpunit,只是忽略了它


我只是删除了额外的.php,然后一切恢复正常

您只需从供应商文件中调用它即可


vendor\bin\phpunit
注意\Not/

这已经很晚了,但我希望这对某人有所帮助

我使用绝对引用来运行测试。 文件夹结构[project/tests/test.php]


我的目录行如下所示。/tests/test.php

在windows上,在终端上使用以下命令

.\vendor\bin\phpunit
如果命令

phpunit
返回“未执行任何测试!”

在Mac上时

./vendor/bin/phpunit

希望有帮助。

可能有一点偏侧,但如果您(像我一样)在Vagrant中使用Laravel,请确保您在Vagrant box中运行phpunit,而不是在“windows端”。)

在我决定使用--debug(顺便说一句,这是一个很好的方法)之前,我花了10分钟的时间才发现一个简单的事实,即文件名不遵守命名约定,最后我多了一个“s”


希望此便笺能对某人有所帮助

如果您正在使用PHPSTORM转到设置,然后转到

  • 测试框架

    然后单击+并选择

  • PHPUnit Local

  • 使用Composer自动加载程序
    然后在“脚本路径”字段中粘贴类似的内容

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • /** test */ function a_thread_can_be_deleted() { ... }
    /** @test */
    function a_thread_can_be_deleted()
    {
        ...
    }
    
    .\vendor\bin\phpunit
    
    phpunit
    
    ./vendor/bin/phpunit
    
    CreateAdminTests
    
    CreateAdminTest
    
    ...
    <testsuite name="Unit">
    
        <!-- modify suffix -->
        <directory suffix=".php">./tests/Unit</directory>
    
    </testsuite>
    <testsuite name="Feature">
    
        <!-- modify suffix -->
        <directory suffix=".php">./tests/Feature</directory>
    
    </testsuite>
    ...
    
    php artisan config:cache
    
    /** @test */
    
    /* @test */
    
    [terminal] vendor/bin/phpunit tests
    
    [terminal] phpunit tests
    
    [terminal]  vendor/bin/phpunit --filter 'Tests\\Routes\\AnyTest' Tests
    
            php artisan make:test TestName //default is future testing
            php artisan make:test TestName --unit //for unit testing 
    
       <server name="DB_CONNECTION" value="sqlite"/>
       <server name="DB_DATABASE" value=":memory:"/>
    
             vendor/bin/PHPUnit --filter function_name or classname
    
    PHPUnit 7.5.20 by Sebastian Bergmann and contributors.
    
    Usage: phpunit [options] UnitTest [UnitTest.php]
           phpunit [options] <directory>