使用自定义框架从目录运行 PHPUnit 测试

Posted

技术标签:

【中文标题】使用自定义框架从目录运行 PHPUnit 测试【英文标题】:Running PHPUnit tests from directory with custom framework 【发布时间】:2012-05-21 06:20:56 【问题描述】:

对于我们的项目,我在 phpUnit 框架之上创建了一个框架,它可以帮助我们完成编写单元测试的一些常见任务。

这个自定义框架继承自 PHPUnit_Framework_TestCase,然后修改了 mySetup() 并为我们的代码添加了一堆有用的函数。

<?php

class OurUnitTestFramework extends PHPUnit_Framework_TestCase 

    public $dbMock;
    protected function mySetup (..)  ... 
    protected function testHelper ()  ... 


?>

现在在我们的测试代码中,我们只是扩展 OurUnitTestFramework 然后编写测试。

<?php 
require_once ("OurUnitTestFramework");
class DatabaseConnectionTest extends OurUnitTestFramework 
     parent::setUp (..)  ... 
     public function testSomeThing ()  ... 
     public function testSomeOtherThing ()  ... 


?>

到目前为止,我们通过 Jenkins 运行所有单元测试,它仍然运行良好,但现在当我们尝试在文件夹中运行测试时,它失败了。文件夹/子文件夹内的所有测试都运行成功,但有一个失败:

[sumit@dev model]$ phpunit database
PHPUnit 3.5.14 by Sebastian Bergmann.

F........

Time: 0 seconds, Memory: 10.50Mb

There was 1 failure:

1) Warning
No tests found in class "OurUnitTestFramework".


FAILURES!
Tests: 9, Assertions: 30, Failures: 1.

我有一个目录数据库,其中包含子目录,并且所有测试都从该文件夹及其子文件夹通过,但是 OurUnitTestFramework 失败,说在此自定义框架中找不到测试。所以我无法理解为什么 phpunit 对测试文件中包含/扩展的文件运行单元测试?

我们可以简单地选择忽略这个错误,但我想知道是否可以这样离开,或者是否需要配置一些东西才能让它通过。

谢谢

【问题讨论】:

您是否能够在不涉及OurUnitTestFramework 的情况下直接运行该文件中的测试,无需其他测试并直接使用PHPUnit。这可能有助于隔离您的问题。 我可以单独运行测试,但我所有的测试都包括OurUnitTestFramework。我不能取出这个框架并直接使用 PHPUnit,因为它需要再次重写测试。还有其他方法吗?谢谢! 【参考方案1】:

使“OurUnitTestFramework”成为一个抽象类。

【讨论】:

这有什么帮助?真正的问题,不是讽刺或粗鲁,只是好奇。 成功了!!你能解释一下为什么它会这样工作吗?我也很好奇。非常感谢!! PHPUnit 中的每个单元测试类必须至少有 1 个测试,这只是你得到的错误。由于这不是一个真正的单元测试,而只是一个基类,因此使其抽象化不仅有意义,而且还使 PHPUnit 将其作为单元测试类忽略。 感谢@Evert!我试图在这个类中编写一个虚拟测试,以便它至少有一个测试,但它仍然失败。但是把它抽象化是可行的。

以上是关于使用自定义框架从目录运行 PHPUnit 测试的主要内容,如果未能解决你的问题,请参考以下文章

Laravel phpunit 跳过自定义测试文件

Laravel / PHPUnit:运行测试时没有模拟类

当我使用标志覆盖率运行 Phpunit 时,出现错误:未定义的变量工厂

处理来自 PHPUnit (Laravel 5.2) 的自定义异常

《Java手写系列》-手写MyBatis框架

shopware 6插件的单元测试未找到自定义服务