当前位置: 首页 > news >正文

python 测试驱动开发的简单例子

一、需求分析

需求:一个类 MyClass,有两个功能:add, sub

1.先功能设计

# myclass.py

class MyClass(object):
    # 加法
    def add(self): 
        pass
        
    # 减法
    def sub(self): 
        pass
        

2.再功能测试

import unittest
from myclass import MyClass

class mytest(unittest.TestCase): 
    # 初始化
    def setUp(self): 
        self.mc = MyClass()
        
    # 退出清理
    def tearDown(self): 
        pass
        
    # 测试加法
    def test_add(self): 
        self.assertEqual(3, self.mc.add(1, 2))
        
    # 测试减法
    def test_sub(self): 
        self.assertEqual(1, self.mc.sub(2, 1))
        
        
if __name__ =='__main__': 
    unittest.main()

3.再功能实现

# myclass.py

class MyClass(object):
    def __init__(self):
        super().__init__()
        
    def add(self, x, y): 
        return x + y
        
    def sub(self, x, y): 
        return x-y
        

4.进行测试

$ python myclass_test.py

OK,现在可以向客户交货了。

老板发话,大家幸苦了,明天放假休息一天。

一切都很美好!

二、需求有变

等等,客户半夜给老板打电话,说有些东西要变一下。

说好的休一天假泡汤了

客户说,1+1=2没有问题,但如果是'1'+'1'='11'是不允许的

这尼玛什么变态的需求啊!好吧,客户是上帝

1.修改功能测试

import unittest
from myclass import MyClass

class mytest(unittest.TestCase): 
    # 初始化
    def setUp(self): 
        self.mc = MyClass()
        
    # 退出清理
    def tearDown(self): 
        pass
        
    # 测试加法
    def test_add(self): 
        self.assertEqual(3, self.mc.add(1, 2))
        self.assertRaises(ValueError, self.mc.add, '1', '2') # 两个数都不是数字,则需要报错
        
    # 测试减法
    def test_sub(self): 
        self.assertEqual(1, self.mc.sub(2, 1))
        
        
if __name__ =='__main__': 
    unittest.main()

2.修改功能实现

# myclass.py

class MyClass(object):
    def __init__(self):
        super().__init__()
        
    def add(self, x, y): 
        #return x + y
        number_types = (int, float, complex)
        if isinstance(x, number_types) and isinstance(y, number_types):
            return x + y
        else:
            raise ValueError
        
    def sub(self, x, y): 
        return x-y
        

3.进行测试

$ python myclass_test.py

好了,交货!

求求您千万别再提什么别的变态的需求了。

相关文章:

  • win10 + uefi
  • Nginx负载均衡的详细配置及使用案例详解.
  • JS 全局变量和局部变量
  • CSS中外联样式表代表的含义
  • tomcat、Linux服务器
  • C#网络编程
  • css设置背景固定不滚动效果的示例
  • XML XPATH simpleXML
  • 学习笔记--mysql的AB复制
  • linux ARP攻击处理
  • C语言基础及指针⑥字符操作
  • Permison Denied
  • 文本处理工具与正则表达式、grep
  • C#中将DataTable导出为HTML的方法
  • day9---多线程,线程锁,队列
  • 收藏网友的 源程序下载网
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • CentOS6 编译安装 redis-3.2.3
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • express + mock 让前后台并行开发
  • java第三方包学习之lombok
  • java中具有继承关系的类及其对象初始化顺序
  • Redis学习笔记 - pipline(流水线、管道)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue ES6 Jade Scss Webpack Gulp
  • 产品三维模型在线预览
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊sentinel的DegradeSlot
  • 漂亮刷新控件-iOS
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 在Mac OS X上安装 Ruby运行环境
  • 说说我为什么看好Spring Cloud Alibaba
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (2)nginx 安装、启停
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (独孤九剑)--文件系统
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)RocketMQ初步认识
  • (转)负载均衡,回话保持,cookie
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net core使用ef 6
  • .Net Core与存储过程(一)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net6+aspose.words导出word并转pdf
  • .NET程序员迈向卓越的必由之路
  • .NET开发者必备的11款免费工具
  • @ConditionalOnProperty注解使用说明
  • @KafkaListener注解详解(一)| 常用参数详解