class Student(object): def __init__(self, name, score): self.name = name self.score = score def get_grade(self): if self.score >= 60 and self.score < 80: return 'B' elif self.score >= 80 and self.score <=100: return 'A' elif self.score >= 0 and self.score <60: return 'C' else: raise ValueError('Wrong score.')
# 我们写好代码之后,往往需要写一些单元测试来测试程序是否满足我们的需求 # 这时候引入python自带的unittest模块,写一个测试模块 # 写一个测试类,从unittest.TestCase继承 # 每一类测试都需要编写一个test_xxx()方法 # 常用的断言是assertEqual(),判断函数返回结果是否和给出的结果相等 # assertTrue(),返回的结果是否为True # assertRaise(KeyError),期待抛出指定类型的Error,比如说,当一个条件不满足时,抛出KeyError # 实际例子 # mydict.py class Dict(dict): def __init__(self, **kw): super().__init__(**kw) def __getattr__(self, key): try: return self[key] # 这里我们定义了一个AttributeError except KeyError: raise AttributeError(r"'Dict' object has no attribute '%s'" % key) def __setattr__(self, key, value): self[key] = value #mydict_test.py import unittest from mydict import Dict class TestDict(unittest.TestCase): # 另外,我们还可以在单元测试中写两个特殊的方法setUp,setDown,这两个方法会分别在没调用一个测试方法的前后分别执行 # 比如我们要测试一个跟数据库有关的程序时,就可以在setUp中链接数据库,在setDown中关闭数据库 def setUp(self): print('setUp...') def tearDown(self): print('tearDown...') def test_init(self): d = Dict(a=1, b='test') # 断言部分,d.a 是否为1 self.assertEqual(d.a, 1) self.assertEqual(d.b, 'test') # 断言部分,d是否为一个dict self.assertTrue(isinstance(d, dict)) def test_key(self): d = Dict() d['key'] = 'value' self.assertEqual(d.key, 'value') def test_attr(self): d = Dict() d.key = 'value' self.assertTrue('key' in d) self.assertEqual(d['key'], 'value') def test_keyerror(self): d = Dict() # 这里我们就期待返回我们程序中定义的KeyError with self.assertRaises(KeyError): value = d['empty'] def test_attrerror(self): d = Dict() # 这里我们就期待返回我们程序中定义的AttributeError with self.assertRaises(AttributeError): value = d.empty if __name__ == '__main__': unittest.main() # 写好测试模块后,我们可以使用 python -m unittest mydict_test来直接运行单元测试 # 用这种方法,可以依次批量运行多个单元测试
很详细,谢谢
赞一个
Sign in to make a reply
Mr_RightMen