PHPUnit - 使用配置文件时'没有执行测试'

Muy*_*Olu 74 php phpunit unit-testing

问题

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

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

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Run Code Online (Sandbox Code Playgroud)

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

输出是我的预期:

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

好的(1个测试,1个断言)

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

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

现在,当我运行命令时:

phpunit
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

Sebastian Bergmann和贡献者的PHPUnit 4.5.0.

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

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

没有执行测试!

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

我还有作曲家json和锁定文件,以及顶层的phpunit xml文件作为文件.

我试过的事情

  • 将目录更改phpunit.xmltests/GeneralStringFunctions
  • 将目录更改phpunit.xml./tests
  • phpunit.xml文件移动到tests目录,然后将目录更改为./而不是tests.
  • 将后缀属性添加到目录标记中phpunit.xml以将"测试"指定为显式后缀.

Rob*_*ear 165

为了它的价值(迟到),我最近遇到了这个问题,而我正在为一个简单的网站制作一个新的Laravel 5.1项目.我尝试调试它,当我尝试时感到困惑:

php artisan make:test homeTest
Run Code Online (Sandbox Code Playgroud)

(它有一个只是断言为true的默认测试是真的)

并看到了输出

No tests executed!
Run Code Online (Sandbox Code Playgroud)

问题最终对我而言与我的PHP安装有关 - "phpunit"是全局注册和配置不同,而Laravel安装附带的phpunit配置恰到好处并完美运行.

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

./vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人!

  • 我认为这很可能是正确的答案.我已经删除了项目,所以我无法仔细检查,但是对于使用composer的未来项目,我总是使用`vendor/bin/phpunit`而不是全局的`phpunit`二进制文件.我甚至已经删除了全局的`phpunit`二进制文件,所以我不会再意外地犯同样的错误 - 而且从那时起它就没有出现过.我将此标记为已接受的答案,因为它很可能是原因. (4认同)
  • 调用`。/ vendor / bin / phpunit`为我完成了最新的laravel 5.4安装 (2认同)
  • @Noitidart你可以为`./ vendor/bin/phpunit`创建一个`alias` (2认同)

Lio*_*nel 82

您的XML文件很好.但是,您必须确保文件tests/夹中的PHP文件的名称如下:

tests/Test.php <---注意大写的"T"
测试/用户Test.php
测试/ fooBar Test.php
等.

文件名必须以"Test.php"结尾.这就是PHPUnit在目录中寻找的东西.

此外,每个测试方法都必须具有以"test"开头的名称:

public function testFooBar()
{
    // Your test code
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

  • 或者您可以使用`--test-suffix = anything.php`来覆盖 (3认同)

Ndo*_*kwo 13

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

.\vendor\bin\phpunit
Run Code Online (Sandbox Code Playgroud)

那是命令

phpunit
Run Code Online (Sandbox Code Playgroud)

返回"没有执行测试!"

在Mac上

./vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


igo*_*ors 10

我的虚拟机上的PHPUnit更新到版本6后,我遇到了同样的问题.甚至--debug和--verbose没有任何用处,只是"没有执行测试".最后,事实证明在新版本中更改了类和命名空间,它只是不想执行包含对旧类的引用的文件.我的修复只是在每个测试用例中替换:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}
Run Code Online (Sandbox Code Playgroud)

有:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}
Run Code Online (Sandbox Code Playgroud)


Alm*_*itt 9

我意识到这太老了,但它也发生在我身上。希望这会帮助某人。

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

错误的:

/** test */
function a_thread_can_be_deleted()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

对:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 两年多后,这就是我的了。它确实必须完全符合评论的格式。我那里缺少一个空间。它没有检测到它。有一点烦人的是,在 laravel 6.1 中我使用了 artisan make 命令,但它不包含该注释 (2认同)
  • 这个答案很有用 (2认同)

che*_*aby 7

在我决定使用--debug(顺便说一句好方法)之前,我拉了我的头发 10 分钟,以发现文件名不遵守命名约定的简单事实,我在末尾有一个额外的“s” .

错误的

CreateAdminTests
Run Code Online (Sandbox Code Playgroud)

CreateAdminTest
Run Code Online (Sandbox Code Playgroud)

希望这篇笔记可以对某人有所帮助


Ham*_*awy 6

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

vendor\bin\phpunit 注意\不/


小智 5

而不是运行 phpunit

使用

供应商\bin\phpunit


use*_*937 5

参加聚会迟到了,但此信息可能对其他人有所帮助。

以上解决方案对我不起作用。从 Laravel 7.x 开始,默认情况下,PHPUnit 只执行后缀为“Test.php”的 PHP 文件。例如,如果您创建一个测试,命名它是CreateUser行不通的,而命名它却CreateUserTest可以。

为了克服这个限制,从元素去phpunit.xml修改suffix属性directory

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...
Run Code Online (Sandbox Code Playgroud)

这将指示 PHPUnit.php从目录中运行所有带有扩展名的文件。注意更新后清除应用程序的缓存phpunit.xml

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

有关 PHPUnit XML 配置的其他信息可以在这里找到:https : //phpunit.de/manual/6.5/en/appendixes.configuration.html