代码整洁之道【8】-- 单元测试

一、TDD三定律

①在编写不能通过的单元测试前,不可编写生产代码;
②只可编写刚好无法通过的单元测试,不能编译也算不通过;
③只可编写刚好足以通过当前失败测试的生产代码;

二、保持测试整洁

测试代码和生产代码一样重要。测试必须随着生产代码的演进而修改。 

正是单元测试使得代码可扩展,可维护,可复用。没有单元测试的保证,就不敢放心地改动代码。测试使代码改动变得可能。

覆盖了生产代码的自动化单元测试能很大程度地保持设计和架构的整洁。有了覆盖率高的测试,可以毫无顾虑地改进架构和设计。

三、整洁的测试

整洁测试的三要素:可读性、可读性、可读性!
在单元测试中,可读性甚至比在生产代码更重要。
测试代码应该和生产代码一样,做到明确、简洁,有足够的表达力,呈现出构造-->测试-->验证的模式。

面向特定领域的测试语言:对于特定领域的测试,可以构造一些函数和工具代码来测试API,不用直接测试目标API;

四、每个测试函数只测一个概念

有的流派认为,Junit中,每个测试函数都应该有且只有一个断言语句(assert)。这条规则虽然有用但是过于苛求了。更好的做法是单个测试中断言的数量应该小化,每个测试函数只测一个概念(一类场景)。

五、F.I.R.S.T

Fast--快速:测试应快速运行;如果测试运行缓慢,你就不会想要频繁的运行它,如果你不频繁的运行测试,就不能尽早发现问题,终,代码就会变坏。

Independent--独立:测试间相互独立,不能有所依赖;某个测试不应为下一个测试设定条件。你应该可以独立运行每个测试,及以任何顺序运行测试。

Repeatable--可重复:测试应在任何环境中可重复通过;

Self-Validating--自足验证:测试应由布尔输出进行验证,无论通过还是失败,你不应该查看日志来确认测试是否通过。

Timely--及时:测试应及时编写。单元测试应该恰好在使其通过的生产代码之前编写。如果在编写生产代码之后编写测试,你会发现生产代码难以测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sysdba os认证登录和远程登录 AUTHENTICATION_SERVICES 参数

1.在数据库未open状态下,登陆验证的是使用密码文件 验证测试 (通过命令: orapwd fileorapwprod password[密码] forcey,创建密码后 使用sqlplus sys as sysdba 登录时,密码验证的密码文件,不会验证数据库中sys的密…

Jackson 工具类使用及配置指南

前言 Json数据格式这两年发展的很快,其声称相对XML格式有很对好处: 容易阅读; 解析速度快; 占用空间更少。 不过,JSON 和 XML两者纠结谁优谁劣,这里不做讨论,可以参见知乎上为什么XML这么笨重的数据结构仍在广泛应用? 最近在…

kali工具----网络映射器(Network Mapper)

识别活跃的主机 尝试渗透测试之前,必须先识别在这个目标网络内活跃的主机。在一个目标网络内,最简单的方法将是执行ping命令。当然,它可能被一个主机拒绝,也可能被接收。本节将介绍使用Nmap工具识别活跃的主机。 1、网络映射器工具…

【mysql 5.7 没有ini 文件,手动添加配置文件】

在安装目录的根目录添加my.ini配置文件: 注意注释的内容, 其中server-id 在开启日志归档的时候,一定要配置, [mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] #server id 一定要设置,否则无法…

渗透工具及其知识库(个人笔记)

1.IP搜寻 查看kali网段&#xff1a; ip addr 、 ifconfig namp&#xff1a;nmap -sP xxx.xxx.xxx.0/24 netdiscover&#xff1a;netdiscover xxx.xxx.xxx.0/24 arp&#xff1a;arp-scan -l 2.端口扫描 粗略扫描&#xff1a;nmap <IP> 深度扫描&#xff1a; …

本科生学深度学习一残差网络,解决梯度消失和爆炸

看到订阅的激励还在继续,今天写下残差网络 1、梯度爆炸和梯度消失 梯度爆炸和梯度消失是两种常见的问题,由神经网络的结构和参数初始化方式引起。它们都与深度神经网络中的反向传播过程相关。 梯度爆炸:这是指在反向传播期间,梯度逐渐增大并最终超出了有效范围。这通常发…

深度学习的模型有几类,能干嘛用?

1、基础模型 &#xff08;1&#xff09;卷积神经网络 **卷积&#xff1a;**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波&#xff0c;有效地提取数据中的局 部特征&#xff0c;从而实现特征数据更高程度的抽象表示。 **池化&#xff1a;**可以理解成“压缩”…

09 Php学习:超级全局变量

超级全局变量 PHP中预定义了几个超级全局变量&#xff08;superglobals&#xff09; &#xff0c;这意味着它们在一个脚本的全部作用域中都可用。 PHP 超级全局变量列表: $GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION $GLOBALS $GLOBALS 是 PHP 中的…

实现优雅的并行程序的策略:

前言: 实现优雅且高效的并行程序确实是并行编程中的一大挑战。在设计并行程序时,确保程序的正确性和性能是主要考虑的两个方面。以下是几个关键策略,可帮助在保证程序正确性的前提下优雅地实现并行程序: 实现优雅的并行程序的策略如下:第一、精心设计任务分解: 并行程序…

【MYSQL】字符串存储类型该怎么选:mysql中char、varchar、text的区别

文章目录 一. 简述二. 各自特点 参考官网&#xff1a;mysql-string-type-syntax 一. 简述 char长度固定&#xff1a; 即每条数据占用等长字节空间&#xff1b;适合用在身份证号码、手机号码等定。varchar可变长度&#xff1a;可以设置最大长度&#xff1b;适合用在长度可变的属…

2024-04-09(CSS移动Web+JS进阶)

1.平面转换 作用&#xff1a;为元素增加动态效果&#xff0c;一般和过度配合使用 定义&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; transfrom属性中有许多方法支持对盒子进行各种变换。 2.空间变换 XYZ三条轴线构成立体空间&#…

Spring源码复习之BeanDefinition理解

文章目录 一. 基本描述二. 源码分析三. BeanDefinition重要实现类1. GenericBeanDefinition2. RootBeanDefinition3. ChildBeanDefinition4. AnnotatedGenericBeanDefinition5. ConfigurationClassBeanDefinition6. ScannedGenericBeanDefinition四. 最佳实践五. 常见问题

算法打卡day39|动态规划篇07| Leetcode 70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

算法题 Leetcode 70. 爬楼梯&#xff08;进阶版&#xff09; 题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述…

全新4.0版本圈子社交论坛系统 ,可打包小程序,于TP6+uni-app 全开源 可打包小程序app uniapp前端+全开源+独立版

简述 首先 圈子系统的核心是基于共同的兴趣或爱好将用户聚集在一起&#xff0c;这种设计使得用户能够迅速找到与自己有共同话题和兴趣的人。 其次 圈子系统提供了丰富的社交功能&#xff0c;如发帖、建圈子、发活动等&#xff0c;并且支持小程序授权登录、H5和APP等多种形式…

dfs板子

递归实现排列 留着明早省赛之前看 #include<iostream> using namespace std; int arr[10010]; int brr[10010]; int n,k; void dfs(int num){if(num > n){for(int i 1;i < n;i){cout << arr[i] << " ";}cout << endl;return;}for(in…

C# winform实现搜索读取已安装的路径

最近在开发winform窗体应用简单的桌面插件,需求是要点击按钮,就可打开相应程序软件但问题在于每个人电脑上的软件安装路径不同所以涉及到读取路径的的问题. 这位兄台写的播客解决了我的问题,甚是不错. ↓↓↓ 解决方案

二、计算机网络物理层基础知识

一、物理层 物理层接口特性&#xff1a;解决如何在连接各种计算机传输媒体上的传输数据比特流&#xff0c;而不是指具体的传输媒体 物理层的主要任务 &#xff1a;确定与传输媒体接口有关的一些特性>定义标准 1、机械特性&#xff1a;定义物理连接的特性&#xff0c;规定物理…

golang kafka sarama源码分析

一些理论 1.topic支持多分区&#xff0c;每个分区只能被组内的一个消费者消费&#xff0c;一个消费者可能消费多个分区的数据&#xff1b; 2.消费者组重平衡的分区策略&#xff0c;是由消费者自己决定的&#xff0c;具体是从消费者组中选一个作为leader进行分区方案分配&#…

人员抽烟AI检测算法原理介绍及实际场景应用

抽烟检测AI算法是一种基于计算机视觉和深度学习技术的先进工具&#xff0c;旨在准确识别并监测个体是否抽烟。该算法通过训练大量图像数据&#xff0c;使模型能够识别出抽烟行为的关键特征&#xff0c;如烟雾、手部动作和口部形态等。 在原理上&#xff0c;抽烟检测AI算法主要…

【Linux系列】Linux判断架构信息

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…