欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

python unittest用法

shiping1 的头像

python unittest用法

 

python的unittest模块提供了一个测试框架,只要我们写一个继承unittest.TestCase的类,类中用setUp做初始化,用tearDown做清理。
主要用到的函数有:
failedinfo表示不成立打印信息failedinfo,为可选参数
self.fail([msg])会无条件的导致测试失败,不推荐使用。
self.assertEqual(value1, value2, failedinfo) # 断言value1 == value2
self.assertTrue(表达式, failedinfo) # 断言value为真
self.assertFalse(表达式, failedinfo) # 断言value为假
# 断言肯定发生异常,如果没发生异常,则为测试失败。
# 参数1为异常,参数二为抛出异常的调用对象,剩余参数为传递给可调用对象的参数。
self.assertRaises(ValueError, self.widget.resize, -1, -1) 
调用时机的加self,如self.assertEqual(self.seq, range(10)),self.assertTrue(value > 100)

更详细的教程见:http://pyunit.sourceforge.net/pyunit_cn.html

 

Python代码  收藏代码
  1. #coding=utf-8  
  2. import random  
  3. import unittest  
  4.   
  5. class TestSequenceFunctions(unittest.TestCase):  
  6.     def setUp(self):  
  7.         self.seq = range(10)  
  8.           
  9.     def test_shuffle(self):  
  10.         # make sure the shuffled sequence does not lose any elements  
  11.         random.shuffle(self.seq)  
  12.         self.seq.sort()  
  13.         self.assertEqual(self.seq, range(10))  
  14.           
  15.         # should raise an exception for an immutable sequence  
  16.         self.assertRaises(TypeError, random.shuffle, (1,2,3))  
  17.   
  18.     def test_choice(self):  
  19.         element = random.choice(self.seq)  
  20.         self.assertTrue(element in self.seq)  
  21.    
  22.     def test_sample(self):  
  23.         with self.assertRaises(ValueError):  
  24.             random.sample(self.seq, 20)  
  25.         for element in random.sample(self.seq, 5):  
  26.             self.assertTrue(element in self.seq)  
  27.   
  28. results_fields = [  
  29.     ("username", unicode),  
  30.     ("showid", unicode),  
  31.     ("total_pv", int),  
  32.     ("pubdate", unicode),  
  33.     ("tags", list),  
  34.     ("showname", unicode),  
  35.     ("pg", int),  
  36.     ("ext", str),  
  37. ]  
  38. results_fields_map = dict(results_fields)  
  39. class TestDictValueFormatFunctions(unittest.TestCase):  
  40.     def setUp(self):  
  41.         self.results = [{  
  42.             "username": u"疯狂豆花",  
  43.             "showid": u"130e28f0fe0811e0a046",  
  44.             "total_pv"14503214,  
  45.             "pubdate": u"2012-07-07 01:22:47",  
  46.             "tags": [  
  47.                 "轩辕剑",  
  48.                 "天之痕"  
  49.                 ],  
  50.             "showname" : u"轩辕剑之天之痕",  
  51.             "pg" : 1,  
  52.             "ext" : "mp4"  
  53.         }  
  54.         ]  
  55.     def test_format(self):  
  56.         self.assertTrue(isinstance(self.results, list), "self.results's type must be dict but got {0}".format(type(self.results)))  
  57.         for r in self.results:  
  58.             for f in results_fields_map:  
  59.                 value = r.get(f, None)  
  60.                 self.assertTrue(isinstance(value, results_fields_map[f]), u"{0}'s type must be {1} but got {2}".format(value, results_fields_map[f], type(value)))  
  61.                 #self.assertTrue(isinstance(value, results_fields_map[f]))  
  62.     def test_value(self):  
  63.         for r in self.results:  
  64.             self.assertEqual(r["pg"], 1)  
  65.             self.assertEqual(r["ext"], u"mp4")  
  66.   
  67. if __name__ == '__main__':  
  68.     # unittest.main() # 用这个是最简单的,下面的用法可以同时测试多个类  
  69.     # unittest.TextTestRunner(verbosity=2).run(suite1) # 这个等价于上述但可设置verbosity=2,省去了运行时加-v  
  70.     suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)  
  71.     suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)  
  72.     suite = unittest.TestSuite([suite1, suite2])  
  73.     unittest.TextTestRunner(verbosity=2).run(suite)  

 

分享到:  
评论
2 楼 canlynet 2014-01-20  
应该是国外的网站,被过滤了无法访问。
你百度一下就可以看到很多教程。
另外,按照例程使用即可。
1 楼 草原狙击手 2013-09-20  
普通分类: