15.1 测试-重要性与testing包

1. 测试的重要性

1.1 单元测试

单元测试是针对一小部分代码进行独立地测试。

单元测试的对象通常是单个函数方法,而要测试的是它在接受给定的输入后,能否产生符合预期的输出。

单元测试的作用主要表现在以下两个方面:

  • 验证程序的最小构件——函数或方法——是否如期望的方式运行
  • 从程序的最小组成部分——函数或方法——中发现系统衰退的迹象。
    • 衰退是在程序不断增大和变化的过程中,因修改而引入的BUG;
    • 衰退意味着程序中的某段代码在修改前还有效,修改后反而无效了。

1.2 集成测试

集成测试是检查应用程序各个组件协同工作的情况。

集成测试还检查诸如网络通信数据库访问等方面的情况,以验证整个系统是否以预期的方式运行。

集成测试比单元测试难度更大,因为它要评估整个应用程序所依赖的各个组成部分。

1.3 功能测试

功能测试是从最终用户的角度,核实软件是否满足了开发方所承诺的各项功能需求。

功能测试侧重外部看到的程序运行情况,而并不关心软件内部的工作机制。

对用户来说,功能测试可能是最重要的测试,例如:

  • 命令行工具针对用户提供的各种输入,是否都显示了正确的输出
  • 网页进行自动化测试,所有的链接是否都能正确地跳转
  • 调用后台服务所提供的API,检查响应是否符合预期

1.4 测试驱动开发(强调测试先行,以测督编) 

测试驱动开发强调从测试的角度考虑新功能的实现。

先通过测试描述程序的功能,再着手编写代码,这样做有很多好处:

  • 在每个代码片段的功能预期都是已知的前提下,进行代码的设计会轻松得多;
  • 测试为每个功能做出的原理性定义,对编码极具指导意义;
  • 在编写代码的过程中,可以随时检查有没有发生衰退;
  • 随时可以使用现成的测试,来验证已经实现的代码;

开发人员可以随时改善设计,并以通过测试作为代码有效的判定标准。

2. testing包

标准库的testing包为测试提供了支持,使用该包需遵从如下约定:

  • 测试代码文件与被测试代码文件位于同一目录
    • 例如[GOPATH]/src/greeting/
  • 测试代码文件名采用被测试代码文件名加上"_test"后缀的形式
    • greeting.go
    • greeting_test.go
  • 测试函数的函数名以"Test"开头,接受一个类型为T的参数
    • func Greeting(s string) string { ... }
    • func TestGreeting(t *testing.T) { ... }

在包目录下执行如下命令,启动单元测试:

  • go test
// 基本测试
// 为了支持测试,Go语言在标准库中提供了testing包,使用该包需遵从如下约定:
// 
// 1. 测试代码文件与被测试代码文件位于同一目录下
// 2. 测试代码文件名采用被测试代码文件名加上"_test"后缀的形式
// 3. 测试函数的函数名必须以"Test"开头
// 
// 执行启动测试命令:go test
package module
import "testing"
func TestTrue(t *testing.T) {if true != true {t.Fatal("The world is crumbling")}
}
// 打印输出:
PASS
ok test/basic 0.473s // actual-expected模式(实际值-预期值模式)
// 变量actual表示函数的实际输出,变量expected表示期望该函数的输出,二者不同,则报告错误
package greeting
import "testing"
func TestGreeting(t *testing.T) {actual, expected := Greeting("World"), "Hello World!"if actual != expected {t.Fatalf("Actual %q, expected %q",actual, expected)}
}
// 打印输出:
--- FAIL: TestGreeting (0.00s)greeting_test.go:15: Actual "Hi World!", expected "Hello World!"
FAIL
exit status 1
FAIL test/expected 0.403s 
// Package greeting return greeting
package greeting// Greeting return greeting
func Greeting(s string) string {return "Hi " + s + "!"
}

 

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

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

相关文章

C++ STL-迭代器函数对象适配器

目录 一.迭代器 二. 函数对象 三. 适配器 一.迭代器 是一种通用的指针类型,可以用来遍历 STL 容器中的元素。 具有以下作用和意义: 提供一种通用的方式来访问容器中的元素。允许对不同类型的容器进行统一的操作。增强了代码的灵活性和可扩展性。 一…

The Best Toolkit 最好用的工具集

The Best Toolkit 工欲善其事,必先利其器,整理过往工作与生活中遇到的最好的工具软件 PDF合并等 PDF24 Tools PDF查看器 SumatraPDF 可以使用黑色来查看,相对不伤眼睛,也有电子书相关的阅读器 Kindle pdf裁边工具 briss 软件卸载…

【C++题解】1085 - 寻找雷劈数

问题:1085 - 寻找雷劈数 类型:for循环 题目描述: 把整数 3025 从中剪开分为 30 和 25 两个数,此时再将这两数之和平方,计算结果又等于原数。 (3025)(3025)55553025 ,这样的数叫“雷劈数”。 求所有符合这…

Photoshop版本选择及系统要求

1、ps2018cc/2020cc版本 适合新手,增加了很多智能化操作,非常方便好上手。 2020: 2、ps2015版本 cc2015版本不论是功能还是硬件上,都是不二选择,适合于配置较低的电脑,该有的基本功能它都有。 3、2021/2…

std::numeric_limits::max和宏定义重复报错问题

问题描述 今天在编译Beckhoff ADS开源组件的时候发现编译报错&#xff0c;报错代码如下 long AdsDevice::ReadReqEx2(uint32_t group, uint32_t offset, size_t length, void* buffer, uint32_t* bytesRead) const {if (length > std::numeric_limits<uint32_t>::ma…

Algorand 的复兴之路:改变游戏规则,打造 RWA 第一公链

TLDR 发布 AlgoKit 2.0&#xff0c;支持 Python 原生语言&#xff0c;打造开发者友好的开发环境&#xff0c;Algorand 的开发者社区规模迅速扩大。 升级共识激励机制&#xff0c;用 ALGO 奖励共识节点参与共识的执行&#xff0c;增加 ALGO 的应用场景&#xff0c;同时进一步确…

GB28181的主动、被动的含义

GB28181有点象视频会议&#xff1a; 终端通过SIP登录服务器。管理员点击某个终端&#xff0c;进行视频。 就是这个主动、被动没有听说。于是问了同事&#xff0c;他说&#xff1a; 主动被动是从服务器角度来看的。所谓被动&#xff0c;就是服务器开一个端口&#xff0c;被动接…

钢结构乙级资质延期,企业如何降低经营风险

当企业面临钢结构乙级资质延期时&#xff0c;为了降低经营风险&#xff0c;可以采取以下措施&#xff1a; 1. 提前规划与准备 资质延续规划&#xff1a;在资质到期前&#xff0c;提前规划资质延续的相关工作&#xff0c;包括准备所需材料、明确流程和时间节点等。 项目评估&…

js去重的几种方式

在JavaScript中&#xff0c;有多种方式可以实现数组去重。以下是几种常见的方式&#xff1a; 使用Set数据结构&#xff1a;使用Set可以快速实现数组去重&#xff0c;Set会自动排除重复的元素。例如&#xff1a; const arr [1, 2, 3, 3, 4, 4, 5]; const uniqueArr [...new S…

如何从官网下载 mysql 二进制安装包

一.下载二进行包 1. 官网网址: https://www.mysql.com/ 如图所示进入官网 2. 点击 DOWNLOADS ,进入如下图 在该页面找到 MySQL Community (GPL) Downloads 点进去 如上图页面&#xff0c;找到 MySQL Community Server 在点进去 下载 linux 通用版 点击最下面 Compressed …

(十四)统计学基础练习题八(选择题T351-400)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学三&#xff09;。序号之前的题请看往期文章。 351&#xff09; 352&#xff09; 353&#xff09; 3…

C++vector部分实现及感悟

myvector.h #pragma once #include<assert.h> #include<iostream> #include<vector> using namespace std; namespace bit {template<class T>//必须使用typename场景\template<typename T>与template<class T>一般情况下这两个通用&#…

Jmeter实战教程入门讲解

前言 通过前面对Jmeter元件的讲解&#xff0c;大家应该都知道常用元件的作用和使用了。编写Jmeter脚本前我们需要知道Jmeter元件的执行顺序&#xff0c;可以看看我这篇性能测试学习之路&#xff08;三&#xff09;—初识Jmeter来了解下。下面我将以工作中的一个简单的实例带大…

Flutter 中的 TableCell 小部件:全面指南

Flutter 中的 TableCell 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;TableCell 是一个用于创建表格单元格的组件…

企业打款验证API在Java、Python、PHP中的使用教程

随着企业银行账号数量的增加和银行间的连接方式不断丰富&#xff0c;企业在进行资金交易时需要确保所填写的收款方账户信息的准确性和合法性&#xff0c;以避免资金损失和风险。然而&#xff0c;由于银行数量众多、地域分布广泛&#xff0c;不同银行间的账户验证机制和信息交互…

vue前端实现页面禁止缩放 前端适配问题处理 前端项目多端适配解决方案

在前端项目中,如果一个系统页面可以缩放可能会导致多种异常情况,这些异常情况涉及到页面布局、元素尺寸、事件触发、响应式设计和用户体验等方面。 1.布局错乱:页面元素在缩放后可能会出现错位、重叠或部分隐藏的情况,导致页面布局混乱,影响用户对页面内容的理解和操作。这…

【云原生】kubernetes中secret原理详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

读AI未来进行式笔记02深度伪造

1. 计算机视觉 1.1. 在人的六感之中&#xff0c;视觉是最重要的 1.1.1. 人类只要看上一眼视频&#xff0c;就能瞬间在脑海中抓取并消化内容和信息 1.1.2. 人类能够对事物进行广义的理解和抽象的认知&#xff0c;即使同一物体在不同的角度…

声量2024 | 内容创作者,该怎样保护你的知识产权

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 阿那亚 联合制作 / 声量The Power of Voice 特别鸣谢 / 深夜谈谈播客网络 本期节目录制于第二届「声量The Power of Voic…

opencascade 布尔运算笔记

BRepAlgoAPI_Common 对两个topods求解 没有公共部分也返回结果了 我想要的结果是没有公共部分返回false 在 Open CASCADE 中使用 BRepAlgoAPI_Common 进行布尔操作时&#xff0c;即使两个 TopoDS_Shape 没有公共部分&#xff0c;操作仍会返回一个结果。为了判断两个形状是否确…