PHPUnit - 使用配置文件时“未执行测试”

新手上路,请多包涵

问题

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

我决定使用 Composer 安装 PHPUnit 作为个人库,让我可以实现常用的数据库功能。起初我没有 PHPUnit 的配置文件,当我运行如下命令时:

 $ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

请注意,这是一个终端命令,所以我没有包含 .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>

现在,当我运行命令时:

 phpunit

我得到以下输出:

Sebastian Bergmann 和贡献者的 PHPUnit 4.5.0。

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

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

未执行任何测试!

如果有帮助,我的目录结构如下:

src - 顶级目录(包含我所有的源代码)

tests - 顶级目录(包含我的所有测试,结构与我的 src 文件夹相同)

供应商 - Composer 第三方文件

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

我尝试过的事情

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

原文由 user4165455 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 449
2 个回答

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

 php artisan make:test homeTest

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

并看到了输出

No tests executed!

对我来说,问题最终与我的 PHP 安装有关——“phpunit”是全局注册和配置不同的,而 Laravel 安装附带的 phpunit 配置正确并且运行完美。

所以修复是运行供应商配置的 phpunit(从与 app/ 和 tests/ 相同的根目录):

 ./vendor/bin/phpunit

希望对其他人有所帮助!

原文由 RoboBear 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了非常相似的问题,这是由 tests phpunit.xml tests 文件夹的相对 路径 引起 testsuites 部分。

概述:

我的配置是:

  • —的全局安装 phpunit/usr/local/bin/phpunit
  • 测试脚本位于 tests 文件夹中的文件系统中某处的文件夹
  • filenameTest.php 文件编写的测试
  • 测试类名称与文件名相同,即 class filenameTest extends TestCase {...}
  • 测试方法命名为 public function test_descriptive_name() {...}

使用 $ phpunit filenameTest.php 逐个运行测试都可以。

当我运行覆盖率报告时 $ phpunit --coverage-html coverage 我收到警告 No tests executed!

 $ phpunit --coverage-html coverage
PHPUnit 8.5.26 #StandWithUkraine

No tests executed!

Generating code coverage report in HTML format ... done [477 ms]

但是,它使用 0.00% Lines Functions and Methods Classes and Traits 信息生成了带有输出和测试文件列表的覆盖文件夹!

从这个角度来看,phpunit 知道要执行哪个文件夹,但什么也不知道。

我红色了这个 StackOverflow 页面和许多其他页面,包括有关 phpunit.xml 配置文件的文档,但在我更改路径之前仍然没有成功。

解决方案:

就我而言,要使覆盖测试正常工作,我必须将 directorytestsuite 更改为 absolute path

所以我用 <directory>tests</directory> 替换了 <directory>/absolute/path/to/the/folder/with/tests</directory> 如下:

 <?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Name of the test Suite">
            <directory>/absolute/path/to/the/folder/with/tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

现在一切都按预期工作。希望这些信息对某人有用。

原文由 ino 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题