且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-20 11:46:52

一、需求分析

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

好了,交货!

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

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5858619.html,如需转载请自行联系原作者