实验三,基于Unittest框架的单元测试

一,实验目的

(1) 掌握单元测试技术,并按单元测试的要求设计测试用例。

(2) 能熟练应用功能性测试技术进行测试用例设计;

(3) 能熟练应用结构性测试技术进行测试用例设计;

(4) 对测试用例进行优化设计;

二, 实验环境

主流PC机一套,要求安装windows操作系统、PyCharm开发工具和OFFICE工具;

三,实验内容:

接受三个正整数a、b、c作为输入,用做三角形的边。三边必须满足条件: 0<a、b、c≤200;程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、普通三角形或不构成三角形。

参考程序:

#inclide<stdio.h>main( ){ int a,b,c;scanf(″%d,%d,%d″,&a,&b,&c);if(a<0||a>200||b<0||b>300||c<0||c>200)printf(″数据输入有错,不满足0<a、b、c≤200″);​    else if(a+b<=c||b+c<=a||a+c<=b)printf(″不构成三角形″);​    else if(a==b && b==c)printf(″等边三角形″);else if(a==b ||b==c||c==a)printf(″等腰三角形″);​    else printf(″普通三角形″);​    }

(1)利用Python语言改成测试程序

#-*- codeing = utf-8 -*-
#@Time : 2021/6/24 14:18
#@Author : 我是nefu小白
#@File : trangle.py
#@Software : PyCharm
def trangle():a = float(input("请输入三角形第一条边的长度:"))b = float(input("请输入三角形第一条边的长度:"))c = float(input("请输入三角形第一条边的长度:"))if ((a < 0 or a > 200 ) and (b < 0 or b > 200) and (c < 0 or c > 200)):print("输入数据有错,不满足 0 < a, b, c < 200")else:if (a + b <= c or b + c <= a or a + c <= b):print("不能构成三角形")elif (a == b  == c):print("等边三角形")elif (a == b or b == c or a == c):print("等腰三角形")else:print("普通三角形")
if __name__ == '__main__':trangle()

(2)利用等价类划分的方法,给出足够的测试用例。

① 如果不满足后面三个条件中的任意一个,则程序输出“非三角形”;

② 如果3条边相等,则程序输出“等边三角形”;

③ 如果有且仅有两条边相等,则程序输出“等腰三角形”;

④ 如果3条边都不相等,则程序输出为“一般三角形”。

显然这四种情况是相互排斥的。

三角形问题包含了清晰而有复杂的逻辑关系,因此经常在软件测试的问题分析中被用到。

仔细分析三角形问题,我们可以得到一个等价类表如下图,然后根据这个表格来设计覆盖上述等价类的测试用例。

覆盖无效类的测试用例

(3)利用Unittest框架编写测试程序,执行这些测试用例。

Unittest测试程序:

#-*- codeing = utf-8 -*-
#@Time : 2021/6/24 14:58
#@Author : 我是nefu小白
#@File : trangleTest.py
#@Software : PyCharm
import unittest
import trangle;
class trangleTest(unittest.TestCase):def setUp(self):"""在这里做资源初始化"""passdef tearDown(self):"""在这里做资源的释放"""passdef test_trangle1(self):trangle.trangle(1.5, 4, 5)def test_trangle2(self):trangle.trangle(3.5, 2.5, 5)def test_trangle3(self):trangle.trangle(2.5, 4.5, 5.5)def test_trangle4(self):trangle.trangle(3, 3, 3)def test_trangle5(self):trangle.trangle(200, 104, 105)def test_trangle6(self):trangle.trangle(3, 3, 3)def test_trangle7(self):trangle.trangle(4, 5, 2)def test_trangle8(self):trangle.trangle(3, 0, 8)def test_trangle9(self):trangle.trangle(0, 6, 0)def test_trangle10(self):trangle.trangle(0, 0, 0)def test_trangle11(self):trangle.trangle(-3, 4, 6)def test_trangle12(self):trangle.trangle(2, -7, -5)def test_trangle13(self):trangle.trangle(-3, -4, -5)def test_trangle14(self):trangle.trangle(101, 4, 5)def test_trangle15(self):trangle.trangle(3, 101, 102)def test_trangle16(self):trangle.trangle(101, 104, 105)if __name__ == '__main__':unittest.main()

执行测试用例结果:

四,实验结果与分析

本次实验没有遇到任何麻烦的问题,一些小问题均是搜索百度,B站,和各种blog解决。
感想:
之前,我一直不知道写单元测试测有什么用,因为单元测试只是把写好的程序运行了一遍,并没有创建新的逻辑,我心里在疑惑“我已经将程序按照我的想法写好了,它就会按照我的设计来运行,为什么要用单测重新走一遍呢?”,后来出了一个事情,代码出了BUG,我调试了好久,才发现问题出在”obja.equals(objb)”,因为obja和objb一个是Long一个是Integer,所以即使数值相同,也不会相等。

从那一刻,我发现单元测试做的事情,其实就是“验证程序是否按照我的想法在运行”,这才是它的终极目的,但是,这却是很关键的事情,设计往往没有错,但是写出来的代码却经常并不是按照我们所想的去运行的。

单元测试,就是验证代码是不是按照我们想象的在运行,这也是单测这个技术的意义所在。
文档下载链接:单元测试实验报告

实验三,基于Unittest框架的单元测试相关推荐

  1. 实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计

    实验三 基于FPGA的数码管动态扫描电路设计 源文件的链接放在最后啦 实验目的: (1) 熟悉7段数码管显示译码电路的设计. (2) 掌握数码管显示原理及静态.动态扫描电路的设计. 实验任务: (1) ...

  2. 使用unittest框架做单元测试------基础版本

    总结:使用unittest做单元测试的步骤 1.导入unittest模块,为了使用unittest框架 2.导入被测试对象,例如一个函数,一个类 3.创建一个测试类.并继承unittest.TestC ...

  3. 实验三 基于GUI的文件管理器——Java实现

    一.实验目的 运用面向对象程序设计思想,基于Java文件管理和I/O框架,实现基于图形界面的GUI文件管理器. 二.实验项目内容 1.实现文件夹创建.删除.进入. 2.实现当前文件夹下的内容罗列. 3 ...

  4. 实验三 基于A*算法的迷宫游戏

    软件实习项目三 -- Java实现基于A*算法的迷宫游戏 一.实验任务 (1)该题要求随机生成一个迷宫,并求解迷宫: (2)要求游戏支持玩家走迷宫,和系统走迷宫路径两种模式.玩家走迷宫,通过键盘方向键 ...

  5. 实验三 基于A*迷宫的算法

    一 实验要求 1.迷宫随机生成 2.玩家走迷宫,留下足迹: 3.系统用A*算法寻路,输出路径 解决问题 1.如何显示迷宫的图形界面: 2.如何生成随机的迷宫: 3.怎样移动游戏中走迷宫的"玩 ...

  6. Selenium Web自动化测试——基于unittest框架的PO设计模式

    引言 前面一直在讲接口自动化测试框架与案例分享,很少讲Selenium这个Web自动化测试神器.它主要用来做UI自动化测试,大家都知道UI自动化测试成本相当高,一般的Web自动化测试我是一直不建议做的 ...

  7. 无线定位技术实验三 基于信号强度的位置指纹定位仿真

    前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看.(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:指纹定位 获取完整报告(含源码+结果+思考 ...

  8. 实验三 基于A*算法的迷宫游戏开发

    实验要求: 1.迷宫随机生成 2.玩家走迷宫,留下足迹: 3.系统用A*算法寻路,输出路径 解决问题: 1.如何显示迷宫的图形界面: 2.如何生成随机的迷宫: 3.怎样移动游戏中走迷宫的"玩 ...

  9. 【计算机网络综合实验】基于eNSP的计算机网络实验(完结篇)

    基于eNSP的计算机网络实验-----完结篇 一.路由器基本配置和静态路由 1.背景知识 2.ENSP模拟过程 3.实际网络设备操作 二.路由器动态配置(RIP.OSPF协议) [有时间再细细回想来写 ...

最新文章

  1. 科技基建,自主创芯——详解全球半导体制造行业格局
  2. Bzoj3730 震波
  3. Windows Server 2003 Clustering 服务
  4. jQuery的Tooltip插件
  5. html右侧分为两个框架,html – 两个框架一个滚动条
  6. java double add,Java中的DoubleStream.Builder add()方法
  7. python数据结构之集合(set)——超详细
  8. python抓取抖音用户画像,摩羯天蝎居然刷得最多?
  9. 习题4-6 莫尔斯代码(Morse Mismatches,ACM/ICPC World Finals 1997,UVa508)
  10. chmod 755 filename
  11. JS中的this是什么,this的四种用法
  12. Java游戏吉他英雄_《吉他英雄》全系列十作美版下载
  13. 【笔记】MyBatis 大于等于小于等于常用写法
  14. 搭讪培训班 - 名品试用 - YOKA时尚论坛 - YOKA社区
  15. 读书笔记软件调试之道 :从大局看调试-零容忍策略
  16. (转)反汇编算法介绍和应用——线性扫描算法分析
  17. iOS开发 给view绘制虚线边框
  18. 电子科技大学图论期末复习重点(杨春老师强调+往年期末卷子总结)
  19. 2022年下半年网络规划设计师下午真题及答案解析
  20. R语言logistic回归交互项(交互作用)的可视化分析

热门文章

  1. pymysql无法访问本地计算机,使用Python和odo模块在mysql上加载csv时出错
  2. 以太网rxp rxn txp txn
  3. 微信小程序纯前端生成海报并保存本地
  4. 30分钟学会js新特性
  5. oracle提示错误1033,ora-1033 制造问题和解决问题
  6. 不动点迭代 开平方 Excel演示
  7. 【JAVA百炼成仙】特别篇——(三个IO练习题)
  8. PHP多进程 - opcode缓存与用户缓存(APC, XCache, eAcclerator,Zend Opcache,Yac)
  9. 软件测试工作的感想怎么写,软件测试工作中的一些感悟
  10. Kafka ui 搭建以及使用