一、需求分析

需求:一个类 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

好了,交货!

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

python 测试驱动开发的简单例子的更多相关文章

  1. python连接mysql数据库简单例子

    今天用pyhton2连接本地的mysql数据库,总的来说比较简单,但还是遇到一些小问题 代码如下: # -*- coding: utf-8 -*- import os import MySQLdb i ...

  2. 测试驱动开发与Python

    最近在看一本书<Test-Driven Development with Python>,里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目.刚好这本书中使用了 ...

  3. 基于Python的测试驱动开发实战

    近年来测试驱动开发(TDD)受到越来越多的关注.这是一个持续改进的过程,能从一开始就形成规范,帮助提高代码质量.这是切实可行的而非天马行空的. TDD的全过程是非常简单的.借助TDD,代码质量会得到提 ...

  4. python多线程简单例子

    python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...

  5. TDD(测试驱动开发)培训录

    2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组 ...

  6. 原创翻译-测试驱动开发(TDD)

    测试驱动开发原则 翻译自<<Expert Python Programming>> 测试驱动开发是指首先编写包含所有测试软件特点的测试集,然后再去开发软件.也就是说,在编写软件 ...

  7. TDD(测试驱动开发)培训录(转)

    本文转载自:http://www.cnblogs.com/whitewolf/p/4205761.html 最近也在了解TDD,发现这篇文章不错,特此转载一下. TDD(测试驱动开发)培训录 2015 ...

  8. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  9. 测试驱动开发(TDD)

    测试驱动开发的基本概念 为什么会出现测试驱动开发 当有一个新的任务时,往往第一个念头就是如何去实现它呢? 拿到任务就开始编码,一边写,变修改和设计 我已经调试了好几遍,应该不会有问题了,好了,先休息一 ...

随机推荐

  1. [转载]Emmet使用

    转载地址:http://www.iteye.com/news/27580 Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语 ...

  2. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

  3. ADO.Net(三)——数据库操作类

    操作数据类 避免代码重用.造对象太多.不能分工开发 利用面向对象的方法,把数据访问的方式优化一下,利用封装类 一般封装成三个类: 1.数据连接类 提供数据连接对象 需要引用命名空间: using Sy ...

  4. Java堆、栈和常量池

    摘录自 http://www.cnblogs.com/xiohao/p/4296088.html 1. 栈(stack)与堆(heap)都是Java用来在RAM中存放数据的地方.与C++不同,Java ...

  5. 微软Nokia 222:可拍照可上网 售价37美元 32GB的microSD卡扩展

    腾讯科技讯 8月27日,在几乎所有厂商都在智能手机领域大肆拼杀的时候,微软日前却悄悄地发布了一款功能手机Nokia 222. 目前,尽管全球许多发达国家的居民都对互联网已经再熟悉不过了,但事实上全球依 ...

  6. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  7. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  8. 一次Mutex死锁的原因探究

    1.现象    最近项目中调出一个bug,某些时候程序会卡死不动,用windbg进行加载后用 ~*kb 命令列出所有的线程栈调用,发现有多个线程调用 WaitForMultipleObjects 在等 ...

  9. node.js学习资料

    Node.js 入门 <汇智网 Node.js 课程> <快速搭建 Node.js 开发环境以及加速 npm> http://fengmk2.com/blog/2014/03/ ...

  10. 大一上学期的一点小疑惑,代码验证ok

    #include<iostream> using namespace std; class test { int *p; int pn; public: test(int n) { p = ...