首页 > 其他分享 >对一个已有项目搭建单元测试集的一个方法

对一个已有项目搭建单元测试集的一个方法

时间:2023-07-10 12:22:31浏览次数:33  
标签:依赖 测试 单元测试 文件夹 func test path 已有 搭建

对一个已有项目搭建单元测试集的一个方法

0 说明

1 准备

1.1 软件环境

googletest
cmake

1.2 需要的知识

单元测试相关概念

1.3 一般原则

  1. 每次只测试一个对象,被测对象应该尽可能的独立,应该是一个很小的单元,依赖项通过mock或stub模拟;
  2. 每个测试项均应执行迅速且独立于测试环境;
  3. 各个测试之间,可以共享一些通用的模拟模块;如果存在模拟模块的特化,则也可以将模拟模块接口化;除此之外,各个测试应该完全独立;

Q: 每次只测试一个对象?

A: 就和函数应该只有一个功能一样,方便理解和维护;

Q:被测对象应该尽可能独立?

A:是指如果被测模块耦合性很强,则为了达到测试的独立性,就会产生很大的模拟工作量,需要考虑单元测试的投入产出比;

Q:哪些依赖项应通过模拟处理?哪些依赖项可以直接使用?

A:1. 如果引入某个依赖项,会影响测试的独立性(比如访问了文件系统),就应该通过模拟去掉这个依赖;2. 如果依赖本身特别复杂,不容易模拟,则这个测试项可能并不适合放在单元测试中;3. 如果依赖项和被测项耦合紧密,不容易分离,则可以考虑直接引入依赖项。注意此时依赖项也是测试项的一部分;4. 如果依赖项中不涉及逻辑实现,则可以直接引入;

2 名词

2.1 mock

mock是指被测试程序依赖的一些外部对象。

项目中我们不通过名字来区分mock、stub、fake对象,统一用mock来表示。注意在编写外部依赖时,控制复杂度(角色不能过多,或者说单一依赖角色尽量单一)。

3 步骤

3.1 测试对象

一个测试集对应一个文件集中的模块。

一个测试集由多个对象组成。一个对象表示一个具体的功能,比如测试程序,mock库,工具库。测试程序是最终会运行的程序,通常由被测试的源代码、依赖库。

3.2 根目录

根目录的CMakeLists.txt给出整个测试集涉及的所有模块的相关定义。对于测试程序,给出测试程序的名字。对于依赖库,给出库的名字,库的源文件。

3.3 子目录

3.3.1 对单个文件进行测试

创建一个和单个文件所在的路径完全一致的文件夹(这个文件夹就是测试这个文件的对应文件夹)。例如,被测试文件的路径为a/b/c/func.cpp,则创建文件夹为a/b/c/func/,然后在这个文件夹中创建CMakeLists.txt和对应的测试文件如test_func.cpp

eg.

被测文件
project_path/a/b/c/func.cpp

测试文件夹
test_path/a/b/c/func/
test_path/a/b/c/func/CMakeLists.txt
test_path/a/b/c/func/test_func.cpp

测试文件夹中的CMakeLists.txt主要内容为:

  • 要引入的头文件路径。
  • 生成可执行文件,并给定对应的源文件。源文件通常包括测试文件、被测试文件、主函数文件。
  • 链接库。除了被测对象外,依赖的对象均应作为MOCK对象提供(不要从被测项目中获取)。
  • 添加本测试特定的编译选项(如宏定义)

3.3.2 对一个目录进行测试

与单个文件相比,调整测试文件夹的路径如下:

eg.

被测文件夹
project_path/a/b/c/func/

测试文件夹
test_path/a/b/c/func/
test_path/a/b/c/func/CMakeLists.txt
test_path/a/b/c/func/test_func.cpp

标签:依赖,测试,单元测试,文件夹,func,test,path,已有,搭建
From: https://www.cnblogs.com/amazzzzzing/p/17540750.html

相关文章

  • MATLAB/Simulink搭建电动汽车整车七自由度模型电动汽车七由度模型,包括纵向运动,侧向运
    MATLAB/Simulink搭建电动汽车整车七自由度模型电动汽车七由度模型,包括纵向运动,侧向运动横摆运动,模糊控制算法,轮胎模型,魔术公式等等,可以自定义车辆参数。转弯制动ABS控制模型,滑移率曲线。极限不稳定工况,蛇形工况,高速转弯制动工况。电动汽车整车模型,稳定性验证。ID:738063806942527......
  • anolis 8.8 (CentOS 8) 环境下搭建青岛大学OJ
    #yum-yinstallpython3-pip  //systemreplied:Packagepython3-pip-9.0.3-22.an8.noarchisalreadyinstalled.#pipinstalldocker-compose //systemreplied:  bash:pip:commandnotfound...#whereispip //systemreplied:  pip:/usr/bin/pip3.6#cd/u......
  • SpringBoot+Mybatis搭建之采坑记录(持续更新...)
    Stoppingservice[Tomcat] 1.缺少Serivce注解无法启动tomcat 2.包名错误3.写了注解没写参数使用Eclipse调试Springboot项目时总是直接进入SilentExitExceptionHandler解决方案:Window-->Preference-->java-->debug-->Suspendexecutiononuncaughtexceptions选项前面的勾......
  • Eclipse搭建springBoot进阶篇-SpringBoot+Mybatis
    Eclipse搭建springBoot入门篇 在入门篇了搭建了一个简单的SpringBoot的Demo,在进阶篇将真正引入实战,也就是能支撑基本的企业中小型项目开发。本次通过springBoot+Mybatis+maven等搭建一个适用于开发中小型项目的简单架构pom文件需要更新maven的jar,对java包进行下载。<?xmlversi......
  • Eclipse搭建springBoot入门篇
    一、SpringBoot介绍SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicati......
  • 官方博客网站搭建指南:只需要三步就可创建高质量官方博客!
    对于大部分线上产品来说,官方博客网站因为其庞大的内容量和信息展示,已经成为商品售前品牌故事打造、用户见证,商品售后使用攻略的信息中心……高质量官方博客正是因为官方博客网站巨大的价值,目前已经成为线上商家品牌可以和消费者“对谈”的渠道之一,并且成为提高转化率的重要因素,所以......
  • Seata-server.bat闪退问题解决及Seata快速搭建
    转:Seata-server.bat闪退问题解决及Seata快速搭建 1.4上 部署的话 参考下边的地址:seata部署指南(v1.6.1) 启动seata服务前请先做好配置 ......
  • 单元测试(三)
    本篇主要介绍PowerMock+Spring+Mybatis+H2单元测试,接上篇:https://www.cnblogs.com/javaXRG/p/17538157.html1PowerMock1.1Mockito的不足不支持局部变量不支持mock静态方法不支持mockfinal修饰的类或方法不支持mock私有方法1.2PowerMock局部变量1packageor......
  • 单元测试(二)
    本节主要介绍Mockito,接上篇:https://www.cnblogs.com/javaXRG/p/17537364.html1、基础用法1.1工程代码1packageorg.example.Domain;23importlombok.AllArgsConstructor;4importlombok.Data;56@Data7@AllArgsConstructor8publicclassUser{91......
  • openharmony环境搭建
    1.源码下载1.1repo安装curl-shttps://gitee.com/oschina/repo/raw/fork_flow/repo-py3>/usr/bin/repo1.2下载openharmony源码[email protected]:openharmony/manifest.git-bOpenHarmony-4.0-Beta1--no-repo-verifyreposync-crepoforall-c'gitl......