程序员晋升必备技能——单元测试框架

简介: 程序员晋升必备技能——单元测试框架

可能每个程序员都面临着这样一种困境:由于客户总是无法用非常清晰的语言来描述需求,他们自身其实也并不完全清楚自己真正想要的是什么,而且即使你已经具备足够的业务知识和背景,为用户提供了全面的解决方案。但对于软件的需求,也会因各种原因而不断变更,所以作为程序员就需要为这些变更做好准备。


另一个促使程序员修改代码的动力,往往来自他们自身,不是每个程序员一上来就可以编写完美高效的代码,技艺超群的程序员总会不断地重构代码。而每一次重构就会面临着在已有测试通过的功能点上再次引入bug。


所以,针对以上的种种情况,搭建一个自动化测试框架就显得尤为重要。而且这也是作为程序员的你迈向高级的必备技能之一。


在开始编码之前,先编写测试框架,这往往会比直接写代码会更快。为什么这么说,就我个人体验,测试框架会帮助你整理思路,注意到被测试类的边界条件,适用范围等一些敏感区域,从而使整个类更加健壮,被证明为错误的几率也大大减小。而且,这也比先写完代码再测试来的更有效。从某种意义上说,这也是一种注意力上的分工。


接下来小豆君跟大家分享一个简单的测试框架,也是达到一个抛砖引玉的目的,欢迎大家积极讨论和提意见。


下面是一个超市商品的例子,该类很简单,旨在说明编写测试框架的步骤及方法。


1 第一步:编写类声明

新建一个空工程,命名为SimpleTest。

向工程中添加一个头文件commodity.h


commodity.h

#ifndef COMMODITY_H
#define COMMODITY_H
#include <string>
using std::string;
class Commodity
{
public:
    Commodity(const string& serialNum,
              const string& name,
              double consting,
              double price);
    //获取商品编号
    string serialNum() const;
    //获取商品名称
    string name() const;
    //获取商品成本
    double consting() const;
    //获取商品价格
    double price() const;
    //修改商品价格
    void setPrice(double price);
    //获取单个商品利润
    double profit() const;
private:
    string m_serialNum;//商品编号
    string m_name;     //商品名称
    double m_consting; //商品成本
    double m_price;    //商品价格
};
#endif // COMMODITY_H

代码很简单,我就不解释了。


2 第二步:编写测试代码

添加main.cpp文件


#include <iostream>
#include "commodity.h"
using std::cout;
int cntPass = 0;
int cntFail = 0;
void test(bool b)
{
    if (b)
        ++cntPass;
    else
        ++cntFail;
}
int main(int argc, char *argv[])
{
    //啤酒,成本4块卖5块
    Commodity c("beer_1", "啤酒", 4, 5);
    test(c.serialNum() == "beer_1");
    test(c.name()      == "啤酒");
    test(c.consting()  == 4);
    test(c.price()     == 5);
    test(c.profit()    == 1);
    cout << "cntPass:" << cntPass << "\ncntFail:" << cntFail;
}

在这里我创建了两个全局变量,cntPass和cntFail,分别表示测试通过数和测试失败数。最后将这两个变量打印出来。


3 第三步:实现类

实现Commodity类


commodity.cpp

#include "commodity.h"
Commodity::Commodity(const string &serialNum,
                     const string &name,
                     double consting,
                     double price)
{
    m_serialNum = serialNum;
    m_name = name;
    m_consting = consting;
    setPrice(price);
}
string Commodity::serialNum() const
{
    return m_serialNum;
}
string Commodity::name() const
{
    return m_name;
}
double Commodity::consting() const
{
    return m_consting;
}
double Commodity::price() const
{
    return m_price;
}
void Commodity::setPrice(double price)
{
    m_price = price;
}
double Commodity::profit() const
{
    return price()-consting();
}


最后编译运行该测试程序



测试全部通过。


关于test测试接口,还可以在其中打印更多的辅助信息,这就有赖于各位朋友的需求来扩展测试代码了。


通过以上的介绍,相信各位朋友对测试框架有了一定的了解,其基本的思想就是“类声明——测试代码——实现类——执行测试”。C++中也提供了一些测试工具,例如CppUnit等,感兴趣的同学可以去了解一下。

在下一篇文章,小豆君将分享Qt提供的测试框架,敬请期待吧。


更多分享请关注微信公众号:小豆君Qt分享,只要关注,便可加入C++\Qt交流群,一起学习,更可获得所有文章源码。

相关文章
|
1月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
98 8
|
1月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
7天前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
50 15
|
16天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
149 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
28天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
61 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
1月前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
46 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化框架选择####
在当今快节奏的软件开发周期中,自动化测试已成为确保产品质量与加速产品迭代的关键策略。本文深入剖析了自动化测试的核心价值,对比分析了市场上主流的自动化测试框架,旨在为项目团队提供选型时的考量因素及实践指南,助力高效构建适应未来变化的自动化测试体系。 ####
|
1月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
79 7
|
1月前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。