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

实验三,基于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):
        """在这里做资源初始化"""
        pass
    def tearDown(self):
        """在这里做资源的释放"""
        pass
    def 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,所以即使数值相同,也不会相等。

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

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

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是nefu小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值