`
xieye
  • 浏览: 821992 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

php单元测试进阶(6)- 核心技术 - 桩件(stub)

    博客分类:
  • PHP
阅读更多
php单元测试进阶(6)- 核心技术 - 桩件(stub)

本系列文章主要代码与文字来源于《单元测试的艺术》,原作者:Roy Osherove。译者:金迎。

本系列文章根据php的语法与使用习惯做了改编。所有代码在本机测试通过。如转载请注明出处。
一个桩件(stub)是对系统中存在的一个依赖项(或者协作者)的可控制的替代物。通过使用桩件,你在测试代码时无需直接处理这个依赖项。

让我们把前面的LogAnalyzer日志分析类实现得更加复杂。
LogAnalyzer类的应用程序可以配置成处理多个日志文件扩展名,每种文件使用一个特殊的适配器。为简单起见,我们可以假设程序支持的各种文件名作为应用程序的配置文件存放在磁盘的某个地方,方法如下
public function isValidLogFileName($filename)
{
        // 读取某个配置文件,根据文件内容决定$filename是否合法。
        // ... ...
        // php经常使用file_get_contents这个函数读取文件内容。。
}

因为被测方法依赖了文件系统,而单元测试不应该与文件系统打交道(好处是极快,且代码通用,无环境依赖)
如何使测试LogAnalyzer类变的容易:抽取接口使底层实现可替换

需要增加一个间接层FileExtensionManager,现在,t2\application\index\controller下有两个文件。
文件管理器类FileExtensionManager.php如下:
<?php
namespace app\index\controller;

/**
 * 文件管理器类
 *
 */
class FileExtensionManager
{
    /**
     * 根据某个配置文件的内容判断文件名是否有效
     * @param string $filename
     */
    public function isValid($filename)
    {
        // 会使用file_get_contents函数读取某个文件的内容
        // 这里为了简略不写,因为不是重点。
        return true;
    }
}

和被测类日志分析器类LogAnalyzer.php,代码如下
<?php
namespace app\index\controller;

/**
 * 日志分析器类,也是被测类
 *
 */
class LogAnalyzer
{
    /**
     * 判断文件名是否有效,调用另一个类来实现
     * @param string $filename
     */
    public function isValidLogFileName($filename)
    {
        $mgr = new FileExtensionManager();
        return $mgr->isValid($filename);
    }
}

然而这么做还是远远不够的。
源代码现在有两个类,
(1)源代码还需增加一个isValid()接口,
(2)源代码让文件管理器类实现此接口
(3)测试代码得增加一个桩件实现接口
(4)日志分析器类得允许注入,无论是文件管理器类或是桩件,不能写死。以便于测试。

文章太长了,下一篇给出全部代码

额外说明,关于FileExtensionManager类的正确性,由集成测试保证,本系列文章只关注单元测试。

上一篇:php单元测试进阶(5)- 入门 - 异常测试
下一篇:php单元测试进阶(7)- 核心技术 - 桩件(stub) - 构造函数注入桩件
分享到:
评论

相关推荐

    cpp-stub 开源代码

    打桩技术则是在单元测试中模拟被测试函数依赖的外部功能,这样可以避免真实环境的复杂性,同时保证测试的独立性和可重复性。`cpp-stub` 库就是为实现这个目的而设计的,它提供了创建和管理这些打桩函数的接口。 在...

    grpc-stub-1.24.0-API文档-中文版.zip

    赠送jar包:grpc-stub-1.24.0.jar; 赠送原API文档:grpc-stub-1.24.0-javadoc.jar; 赠送源代码:grpc-stub-1.24.0-sources.jar; 赠送Maven依赖信息文件:grpc-stub-1.24.0.pom; 包含翻译后的API文档:grpc-stub-...

    cpp-stub 中文使用手册

    单元测试打桩开源库 cpp-stub 使用手册 中文版本,这是从git上直接下载的,git上下载的源代码在arm上调用Stub.reset方法会引发段错误,在资源cpp-stub开源代码(下载地址:...

    grpc-stub-1.24.0-API文档-中英对照版.zip

    赠送jar包:grpc-stub-1.24.0.jar; 赠送原API文档:grpc-stub-1.24.0-javadoc.jar; 赠送源代码:grpc-stub-1.24.0-sources.jar; 赠送Maven依赖信息文件:grpc-stub-1.24.0.pom; 包含翻译后的API文档:grpc-stub-...

    PyPI 官网下载 | django-stub-0.1.tar.gz

    **PyPI 官网下载 | django-stub-0.1.tar.gz** 在Python的世界里,PyPI(Python Package Index)是官方的第三方Python软件包仓库,开发者可以在这里发布自己的Python库,供全球用户下载和使用。`django-stub-0.1.tar...

    java程序员白盒单元测试必备技能 -- Junit4

    Java程序员在进行软件开发时,单元测试是必不可少的一环,以确保代码的正确性和稳定性。Junit4作为Java领域中最常用的单元测试框架,是每个Java开发者必须掌握的技能之一。这篇压缩包文件中的"Junit4教程.doc"文档,...

    前端开源库-dom-stub

    在`dom-stub-master`这个压缩包中,可能包含以下内容: - `src`目录:源代码文件,包括`dom-stub`的实现。 - `dist`目录:编译后的可发布的版本,通常包含一个或多个JavaScript文件,可以直接引入到项目中使用。 - ...

    stub测试桩函数库 函数库

    Stub测试桩函数库是软件测试领域中一个重要的工具,它在单元测试中扮演着关键角色。测试桩(Stub)是用来模拟被测代码依赖的外部组件或服务的行为,以控制测试环境并提供预定义的响应。这样,我们可以在孤立的环境中...

    新利用驱动程序和桩程序进行单元测试

    本话题聚焦于如何利用驱动程序(Driver Program)和桩程序(Stub Program)来有效地进行单元测试,特别是在Java环境下。 驱动程序和桩程序是单元测试中的两个关键概念: 1. **驱动程序(Driver Program)**:驱动...

    单元测试的艺术 源代码

    《单元测试的艺术》是Roy Osherove所著的一本经典著作,主要探讨了软件开发中的单元测试技术及其重要性。源代码的提供使得读者能够更深入地理解和实践书中的理论知识。下面,我们将深入探讨单元测试的核心概念、相关...

    cpp-stub函数打桩相关文件

    - **单元测试**:在单元测试中,通过桩函数替换外部依赖,保证测试的独立性和可重复性。 - **性能分析**:通过桩函数记录调用频率,可以分析代码性能瓶颈。 - **故障隔离**:在调试过程中,可以使用桩函数替换问题...

    单元测试

    单元测试是一种软件开发过程中的重要环节,主要用于验证代码的各个最小可测试单元,如函数、方法或类,是否能够按照预期工作。通过编写自动化测试用例,开发者可以在修改代码后快速检查新变更是否引入了错误,确保...

    基于RTRT单元测试

    - **桩模块**(Stub):替代被测单元中调用的其他基本单元或外部接口,用于模拟其行为。 #### 五、单元测试策略 单元测试的实施策略有很多种,主要包括以下几种: 1. **自顶向下测试**: - **方法**:从系统的...

    gdb-stub.rar_remote

    GDB不仅支持本地调试,还可以通过远程协议进行远程调试,这就是“gdb-stub”所涉及的核心概念。在本案例中,"gdb-stub.rar_remote" 指的可能是一个包含GDB远程调试桩(Stub)的压缩包,它允许开发者在远程设备上运行...

    gdb-stub.rar_gdb stub

    调试桩的核心功能包括: 1. **初始化**:启动时设置必要的硬件状态,准备接收调试命令。 2. **通信接口**:实现GDB的远程协议,通常通过串口、网络或者其他通信通道与主机GDB交互。 3. **指令执行**:接受GDB的指令...

    IP路由-OSPF-Stub配置.docx

    OSPF 路由配置 - Stub 区域配置指南 OSPF(Open Shortest Path First)是一种链路状态路由协议,广泛应用于大型企业网络和ISP网络中。作为一种内部网关协议(IGP),OSPF 能够提供高效、可靠的路由选择和网络拓扑...

    第-章-软件测试单元测试优秀文档.ppt

    单元测试涉及多种技术,如功能测试、静态测试、白盒测试、状态转换测试和非功能测试。测试策略有自顶向下、自底向上和孤立的单元测试。自顶向下策略从高层模块开始,逐步替换为桩模块,而自底向上则是从底层模块开始...

    C# 进行单元测试实例

    随着软件开发技术的不断发展,单元测试作为软件质量保障的重要组成部分,越来越受到开发者的重视。C#作为一种广泛使用的编程语言,在.NET框架的支持下,提供了丰富的工具来进行单元测试。本文将详细介绍如何在Visual...

    php-stub:用于制作合作者的库,用于测试

    php存根 用于制作合作者的库,用于测试。安装使用 composer 要求: "nulpunkt/php-stub": "dev-master"例子 use Nulpunkt \ PhpStub \ Stub ;// A standard Stub$ stub = new Stub ([ 'answer' =&gt; 42 , 'callMe' =&gt; ...

Global site tag (gtag.js) - Google Analytics