0

0

单元测试理论(续):第 2 部分

WBOY

WBOY

发布时间:2023-09-02 14:37:14

|

955人浏览过

|

来源于php中文网

原创

单元测试理论(续):第 2 部分

在上一篇文章中,我们开始讨论 WordPress 中的单元测试理论。具体来说,我们回顾了我们在单元测试主题和插件方面的工作,然后开始讨论代码单元,这如何影响我们的测试,并且我们回顾了更大的软件开发世界中的单元测试。

我们将继续讨论 WordPress 中的单元测试理论,但会从它如何帮助识别问题、驱动架构、记录项目等角度进行讨论。


发现问题,节省时间

回想一下本系列前面的内容,进行单元测试的传统方法是这样的:

  • 编写测试,运行它(知道它会失败)
  • 编写函数以使该方法通过。
  • 运行测试。如果测试失败,则继续处理该功能;否则,转到下一个。

是的,第一步有点教条。为什么要浪费时间去运行一些你知道会失败的东西,对吧?不过,你明白了。但是当您开始将这种特殊技术应用于开发时,您会发现编写代码时会形成一定的节奏,而这是整个目标的一部分。

但这只是其中的一半——单元测试实际上可以帮助您在开发早期发现问题。

为了理解这一点,最好回顾一下这个想法。

假设您正在为基于 WordPress 的项目开发一项功能,您将允许用户在不实际登录 WordPress 仪表板的情况下创建用户帐户。这假设您已经设置了一个页面模板来处理注册、必要的验证以及用于生成密码和电子邮件的代码。

您在浏览器中加载页面,尝试创建一些用户 - 一些具有相同的电子邮件地址,一些具有不正确的密码,一些具有非法字符等。您明白了 - 有多种方法验证通过和失败。这太粗糙了!这意味着每次更改用户注册功能时,您都必须执行相同的 n 次注册,以确保不会出现任何问题。

或者您可以编写一套测试来处理它,并在每次代码更改时运行它们。

所以,是的,编写单元测试可能会花费大量时间,但看看每次修改代码单元时节省的时间。这是非常值得的,这可以帮助尽早发现问题(即在发布到生产之前),这些问题可能会因为有人忘记模拟测试的一种排列而被错过。


自我记录

在编写单元测试时,您不仅可以通过确保代码实际工作来提高代码质量,而且本质上还可以提供面向开发人员的文档。

如果您正在对产品中构建的功能进行单元测试,您将提供有关功能如何工作、何时应该失败以及何时应该通过的文档。

随之而来的是一些假设:具体来说,您正在逻辑地命名和分组您的函数及其相关测试,并且您正在正确测试每个函数。

通过 PHPUnit,WordPress 单元测试可以轻松执行易于阅读的断言。您只需声明assertTrue、assertFalse 或组成项目的函数上可用的任何其他断言。

按照上面的示例,这意味着您可以编写一个函数来确保用户注册函数在尝试使用空电子邮件地址注册时失败:

$this->assertFalse( registerNewUser( '' ) );

也许是一个简单的例子,但要点仍然是:您的代码变得自文档化,并且只需要您编写清晰的单元测试。


架构

也许单元测试最被低估的优势之一是它可以帮助驱动项目的架构。通常,主题或插件开发可以通过以下两种方式之一开始:

无忧淘宝客系统(集成jssdk)
无忧淘宝客系统(集成jssdk)

老版本已经不能使用 新版本集成了jssdk 可以正常使用了 2012、5、19修复部分已知BUG 增加TXT文章管理系统,测试火车头等采集器可以 成功发布文章 修改模板调用函数,让模板打造更简单 新增单页推广模块: 目前整站模板1套,单页模板2个 建立文章分类 》 建立单页模块 填写文章ID 》添加广告语 》 添加分类商品(原添加商品位置 新增了下拉框,选择分类,设置关键词或分类 一键获取

下载
  1. 列出函数,绘制用户界面,然后编写代码
  2. 画出文件如何协同工作的图表,然后编写代码

这些本质上并不是坏事,但我认为它们很弱(我将是第一个承认我所做的事情比我想分享的要多的人!)。但是“编写代码”步骤需要承担很多责任,不是吗?

对于任何一个长时间编写代码的人来说,你都太熟悉了,以至于你最终会意识到,“哦......我没有想到这一点。”

如果你幸运的话,这通常意味着你可以编写一个辅助方法或另一个条件来处理你忽略的情况,但在最坏的情况下,这意味着你可能必须重新设计你的整个类或整个集合解决这个问题的函数。

单元测试虽然并不完美,但可以帮助缓解这种情况。

考虑一下这样一个事实:从一开始,您就列出了您希望主题或插件提供的所有功能。您尚未编写任何代码,但也许您有某种类型的 UI 草图和/或一组类图。

接下来,您开始编写要编写的测试以测试您的项目。回想一下,单元测试的一部分是将代码分解为尽可能的原子单元,因此您的任务是为每个单元编写单元测试,咳咳

由于单元测试的性质,您本质上会以不同的方式思考您的代码:您正在考虑“编写测试”,而不是“编写代码”,并且因为您必须在更原子的级别上进行思考,您会情不自禁地考虑经常被归入“编写代码”的边缘案例。


代码的语言

作为开发人员,我们非常习惯使用不断强化我们编写代码的约定。我的意思是,我们倾向于提供缩写的变量名称、神秘的函数名称和类名称,这些名称对于您自己或项目团队之外的任何人来说可能没有任何意义。

单元测试不一定是编写更易于阅读的代码的关键,但它可以进一步帮助提供更清晰的函数名称。

回想一下您读过的第一本编程书、您参加的第一堂计算机科学课或者您看到的第一段开源代码,方法名称通常是动词。为什么他们不应该这样?方法是封装代码的方法,做一些事情。但随着我们在项目上工作的时间越来越长,我们变得越来越懒,我们的代码从“register_user_and_email_password()”变成“new_account()”。

显然,前者比后者更清晰,但如果我们致力于高质量的单元测试,并且希望确保我们的单元测试易于阅读,为了使它们易于阅读,我们的函数名称必须易于阅读。

这不是更容易阅读吗:

$this->assertFalse( register_user_and_email_password( '' ) );

而不是这个?

$this->assertFalse( new_account( '' ) );

同样,这也许是一个简单的示例,但原则仍然是:编写良好的单元测试,以帮助自我记录驱动函数语言的代码。


结论

我们已经讨论了单元测试的基础知识以及主要优点,但是我们还没有讨论单元测试带来的缺点,我们甚至还没有考虑如何将其合并到我们的项目中。工作流程。

因此,在下一篇文章中,我们将尝试做到这一点。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

409

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

303

2024.04.15

Golang 命令行工具(CLI)开发实战
Golang 命令行工具(CLI)开发实战

本专题系统讲解 Golang 在命令行工具(CLI)开发中的实战应用,内容涵盖参数解析、子命令设计、配置文件读取、日志输出、错误处理、跨平台编译以及常用CLI库(如 Cobra、Viper)的使用方法。通过完整案例,帮助学习者掌握 使用 Go 构建专业级命令行工具与开发辅助程序的能力。

1

2025.12.29

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

162

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

52

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

108

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

349

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

677

2025.12.26

俄罗斯搜索引擎yandex入口汇总
俄罗斯搜索引擎yandex入口汇总

本专题整合了俄罗斯搜索引擎yandex相关入口合集,阅读下面的文章查看更多入口。

796

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号