使用 PHPUnit 测试抽象类的方法

2024-05-19

我有一个抽象类,其中包含我希望测试的通用方法,因此我不必在扩展该类的每个类中继续测试它们。

abstract class Class1 implements iClass1
{
    const VALUE = 'A';
    private $Return;    
    public function __construct($Field = NULL)
    {
        if( ! is_null($Field) )
            $this->SetField($Field);
    }
    public function GetField()
    {
        return $this->Return;
    }
    public function SetField($Field)
    {
        if (strlen($Field) != 3)
        throw new CLASS1_EXCEPTION('Field "' . $Field . '" must be 3 digits.');

    $this->Return = $FieldCode;
    }
    abstract function CalculateData();
}

我想创建基本测试用例,然后测试构造函数、GetField 和其他函数,然后我的其他测试文件可以测试抽象函数。

我希望能够测试 const 没有改变,字段抛出异常等等......

TEST:

class TEST_CLASS1 extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        require_once('CLASS1.php');
    }
    public function testConstants()
    {
        $this->assertEquals(CLASS1, 'A');
    }

    /* @expectedException CLASS1_EXCEPTION
    public function testLargeFieldException()
    {
        $class1 = new CLASS1('ABCD');
        $class1 = new CLASS1();
        $class1->SetField('ABCD');
    }
}

由于无法创建 CLASS1 对象,因为它是抽象类,因此如何创建测试?


一种选择是创建一个

TestableClass1 extends Class1 {
     public function CalculateData() {}
}

并使用该类进行测试。

另一种选择是做几乎相同的事情,但使用 phpunit 为您提供的 API:

为此,请参阅示例例 10.13:测试抽象类的具体方法 of the phpunit documentation http://www.phpunit.de/manual/3.6/en/test-doubles.html#test-doubles.mock-objects:

一个更简单的例子:

abstract class AbstractClass
{
    public function concreteMethod()
    {
        return 5;
    }

    public abstract function abstractMethod();
}

class AbstractClassTest extends PHPUnit_Framework_TestCase
{
    public function testConcreteMethod()
    {
        $sut = $this->getMockForAbstractClass('AbstractClass');
        $this->assertSame(5, $sut->concreteMethod());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHPUnit 测试抽象类的方法 的相关文章

  • 在 OSX 上设置 PHPUnit

    尽管我确信其他人最终已经设法解决了这个问题 但我一直在关注各种文档 并且度过了一段艰难的时光 http www phpunit de manual current en installation html http www phpunit
  • 如何使用 symfony 2.3 在 WebTestCase 中提交无效的选择选项

    我正在尝试在 symfony 2 3 中测试一个表单 该表单具有选择输入 以及文件上传 enctype multipart form data 选择输入如下 这是必填字段 有 3 个选项 1 2 3 使用 DomCrawler 我选择表单
  • Symfony 2 功能测试外部 URL

    无论我做什么 我总能得到一个 Symfony Component HttpKernel Exception NotFoundHttpException 否 已找到 的路线 in crawler gt text 当我尝试使用以下命令请求外部
  • Laravel phpunit 异常处理

    我正在使用 Laravel 5 5 和 Vue js 编写一个 Web 应用程序 PHPUnit 版本是 6 3 1 当用户使用表单请求注册时 我正在测试验证错误 Route web php Route post register Auth
  • 使用 phpunit 9.5 捕获警告、通知和弃用

    Quoting https phpunit readthedocs io en 9 5 writing tests for phpunit html testing php errors warnings and notices https
  • phpunit 避免模拟的构造函数参数

    有什么方法可以避免 phpunit 调用模拟对象的构造函数 否则我需要一个模拟对象作为构造函数参数 另一个模拟对象作为构造函数参数 等等 api 似乎是这样的 getMock className methods array array ar
  • 如何在 PHPUnit 中执行所有测试?

    我正在尝试从我的测试套件运行所有测试 但是当我运行命令时 PHPUnit 找不到测试phpunit 我在 phpunit xml 中配置测试套件 phpunit xml
  • Symfony 功能测试失败,但相同的请求在浏览器中有效

    我跟着Symfony 文档 http symfony com doc current book testing html functional tests关于功能测试 以便编写我的第一个测试 但我有一些问题 我通过浏览器得到的响应效果很好
  • 使用 Composer 安装 PHPUNIT

    我有一个关于 Symfony 2 的项目 我想在 Windows 7 上使用 PHPUNIT On githut phpunit is Composer Simply add a dependency on phpunit phpunit
  • 仅在 PHPUnit 中需要时才执行 dataProviders?

    我的测试套件即使只是开始也需要几分钟 这是因为数据提供者在 phpunit 启动时立即执行 并且它们的所有数据 数千个对象 都保存在内存中 有没有办法在测试运行之前调用 dataProviders 我不在乎在屏幕上看到如此精确的进展 Tha
  • 如何对 Laravel Mailable 进行断言

    在测试中 我想使用以下方法对 Mailable 做出一些断言Mail assertSent 像这样 Mail assertSent MyMailable class function mail use user return mail gt
  • 对需要发送标头的项目进行单元测试

    我目前正在与 PHPUnit 合作 尝试在我正在编写的内容的同时开发测试 但是 我目前正在编写会话管理器 并且在这样做时遇到了问题 Session 处理类的构造函数是 private function construct if header
  • BrowserKit 组件不可用

    当我尝试启动功能测试时出现错误 BrowserKit 组件不可用 php bin phpunit usr bin env php PHPUnit 6 5 14 by Sebastian Bergmann and contributors T
  • 为什么 symfony DOMCrawler 对象无法在依赖的 phpunit 测试之间正确传递?

    我有一个适用于我的 symfony 应用程序的 phpunit 测试套件 在该测试文件中 我在不同的测试之间有一些依赖关系 并在依赖关系之间传递一个 DOMCrawler 对象 这样我就不必每次都导航到它 但是 在采用我所做的方法时 您似乎
  • PHPUnit\Framework\TestCase 和 Tests\TestCase 有什么区别?

    我注意到在示例测试中 这两个类是内置的 功能测试 gt use Tests TestCase 单元测试 gt PHPUnit Framework TestCase 两者有什么区别 在什么情况下您会使用其中一种 PHPUnit Framewo
  • 来自本地 XML 的模拟 SoapClient 响应

    我想用文件中的 XML 来模拟 SoapClient 的响应 我如何创建一个 stdClass 对象 就像 SoapClient 从文件返回一样 客户端已经包装了 SoapClient 因此可以轻松模拟响应 我的模拟是这样的 soapCli
  • 通过 PEAR 安装 PHPUnit

    我安装时遇到问题PHPUnit 3 4 6 via 梨1 9 0 当我发现频道后pear phpunit de并尝试使用以下命令之一 pear 安装 phpunit PHPUnit pear 安装 alldeps phpunit PHPUn
  • PHPUnit 和来自 Guzzle 的模拟请求

    我有一堂具有以下功能的课程 public function get string uri stdClass this gt client new Client response this gt client gt request GET u
  • Symfony 2 中实体管理器和 phpunit 的问题

    我的 phpunit 中的实体管理器有问题 这是我的测试 public function testValidChangeEmail client self createAuthClient user password crawler cli
  • 未找到“Mockery”类

    我使用 laravel 4 1 框架 并且阅读了 Laravel testing decoded 这是 Jeffrey Wey 写的一本电子书 我想测试我的模态用户和我的方法setPasswordAttribute password 我的单

随机推荐

  • C++ - 使用枚举生成一副牌

    我刚刚开始学习C 对头文件和类结构的概念仍然很陌生 我学习Java已经有2年了 C 语法和一些操作有不同的行为 我正在尝试制作一副纸牌 为了使代码更清晰 我想对卡片的花色和值使用枚举 然而 Deck 类中的问题是我有一种方法可以使用以下方法
  • “没有名为‘cv2’的模块”,但已安装

    我已经安装了包含 opencv 贡献的 whl 文件 因为我想使用 SIFT 算法 我在 conda 环境中使用 pip 安装了它 所以当我在 conda list 中提示时 它会向我显示 opencv python 3 4 5 contr
  • 如何使用 Pygame 将捕获的图像保存到磁盘

    这是我的代码 它启动网络摄像头 import pygame camera import pygame image import sys pygame camera init cameras pygame camera list camera
  • 当 mstest 成功运行并且所有测试通过时,为什么 PartCover 报告显示 0%

    我正在尝试通过 mstest 测试获得代码覆盖率 我正在使用 PartCover 2 2 0 36424 问题在于真实的程序集 我得到 0 的代码覆盖率 注意 所有测试都通过 在我创建的演示源的演示测试中 它运行良好 报告很有意义 我注意到
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • 在 (Liberty) 批处理块步骤中,从该步骤之前发出的数据库查询滚动浏览 ResultSet 时,获取“ResultSet 已关闭”

    我正在从 DB2 表读取数据并将其转储到文件中 我在块侦听器的 beforeChunk 中执行简单的选择查询 并使用步骤上下文将其获取到 itemreader 中 在块中 我将检查点策略设置为 item 将 itemcount 设置为 5
  • Kotlin super.finalize()

    当迁移到Kotlin from Java我遇到了一个问题 我覆盖了Object s finalize method Override protected void finalize throws Throwable stopTimer su
  • DC.js 中的工具提示(D3 库)

    DC js 具有强大的内置功能 可显示每个工具提示文档 https github com dc js dc js blob master web docs api latest md title titleFunction 功能 无论如何
  • Chart.js - 在哪里可以找到应该注册哪些组件?

    我是 Chart js 的新手 看到了 v3 文档 Chart js 3 是可摇树的 因此有必要导入并注册您将要使用的控制器 元素 比例和插件 我想知道在哪里可以找到这些用于注册的东西 例如需要注册什么这个例子 https www char
  • Powershell 将单个字符串与多个正则表达式匹配?

    除了依次迭代每个正则表达式之外 是否有一种更 powershelly 的方式将单个字符串与正则表达式的数组 集合进行匹配 我真正想做的是这样的 database Name match includeRegexArray 考虑到 Powers
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • 如何在JMeter中实现pacing?

    我在 jMeter 中模拟以下场景 10 个用户 ThreadGroup 正在登录 每个用户 ThreadGroup 应等待 延迟 10 秒才能启动下一个用户 ThreadGroup 我该如何实施 现在我有这样的事情 线程组 10us Ht
  • 将 R (ramda) 导入 typescript .ts 文件

    我正在尝试使用Ramda js如下
  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • 按键对 JavaScript 对象进行排序

    我需要按键对 JavaScript 对象进行排序 因此 以下内容 b asdsad c masdas a dsfdsfsdf 会成为 a dsfdsfsdf b asdsad c masdas 这个问题的其他答案已经过时 与实施现实不符 并
  • 将类的实例(类的对象)传递给另一个类

    我不明白的是b Bar a 它有什么作用 怎么Bar taking a作为一个论点 那岂不是意味着Bar继承自a 什么是Bar Foo1 Foo 是不是意味着Foo1是类的一个实例Foo 我们如何访问Foo1当它本身是一个对象时 是什么意思
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • sbt 找不到启动器 jar:./bin/sbt-launch.jar

    我已经成功地使用 sbt 进行基本的 Scala 编译好几年了 但有一天它由于某种原因停止工作 我在自己的帐户中使用它 但我决定让我的系统管理员在我们的本地网络上安装最新版本 当我尝试运行它时 我得到 找不到启动器 jar bin sbt
  • 使用 PHPUnit 测试抽象类的方法

    我有一个抽象类 其中包含我希望测试的通用方法 因此我不必在扩展该类的每个类中继续测试它们 abstract class Class1 implements iClass1 const VALUE A private Return publi