zoukankan      html  css  js  c++  java
  • python unittest 2

    参考资料:http://pyunit.sourceforge.net/pyunit_cn.html ;http://docs.python.org/2/library/unittest.html

    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)

    代码: ut2.py

    #!/usr/bin/env python
    #encoding: utf-8
    
    import random
    import unittest
    
    class TestSequenceFunctions(unittest.TestCase):
        #----------------------------------------------------------------------
        """"""
        def setUp(self):
            self.seq = range(10)
            
            
        def test_shuffle(self):
            #make sure the shuffled sequence does not lose any elements
            random.shuffle(self.seq)
            self.seq.sort()
            
            self.assertEqual(self.seq, range(10))
            
            #should raise an exception for an immutable sequence
            self.assertRaises(TypeError, random.shuffle, (1,2,3))
            
            
        def test_choice(self):
            element = random.choice(self.seq)
            self.assertTrue(element in self.seq)
            
            
        def test_sample(self):
            with self.assertRaises(ValueError):
                random.sample(self.seq, 20)
                
            for element in random.sample(self.seq, 5):
                self.assertTrue(element in self.seq)
                
    results_fields = [
        ('username', unicode),
        ('showid', unicode),
        ('total_pv', int),
        ('pubdate', unicode),
        ('tags', list),
        ('showname', unicode),
        ('pg', int),
        ('ext', str),
    ]
    
    results_fields_map = dict(results_fields)
    
    class TestDictValueFormatFunctions(unittest.TestCase):
        def setUp(self):
            self.results = [{
                "username": u"test",  
                "showid": u"130e28f0fe0811e0a046",  
                "total_pv": 14503214,  
                "pubdate": u"2012-07-07 01:22:47",  
                "tags": [  
                    "sword",  
                    "scar"  
                    ],  
                "showname" : u"sword scar",  
                "pg" : 1,  
                "ext" : "mp4"              
            }
            ]
        
        def test_format(self):
            self.assertTrue(isinstance(self.results, list), "self.results's type must be dict but got {0}".format(type(self.results)))
            for r in self.results:
                for f in results_fields_map:
                    value = r.get(f, None)
                    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)))
                    #self.assertTrue(isInstance(value, results_fields_map[f]))
                    
        def test_value(self):
            for r in self.results:
                self.assertEqual(r["pg"], 1)
                self.assertEqual(r["ext"], u"mp4")
                self.assertEqual(r["username"], u"test")
                
                
    if __name__ =="__main__":
        # unittest.main() # 用这个是最简单的,下面的用法可以同时测试多个类
        # unittest.TextTestRunner(verbosity=2).run(suite1) # 这个等价于上述但可设置verbosity=2,省去了运行时加-v  
        suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)  
        suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)  
        suite = unittest.TestSuite([suite1, suite2])  
        unittest.TextTestRunner(verbosity=2).run(suite)      

    测试:

    这个测试,使用TestLoader的loadTestsFromTestCase方法加载测试案例的类testCaseClass,通过unittest.TestSuite建立测试套件,以此替代了 unittest.main()。

  • 相关阅读:
    Java8新特性2 lambda表达式
    Java8新特性1
    多线程与高并发(2)Volatile+CAS
    多线程与高并发 Synchronize
    《重构:改善既有代码的设计》读书笔记5 简化函数调用
    《重构:改善既有代码的设计》读书笔记4 简化条件表达式
    mysql语法大全使用篇
    《重构:改善既有代码的设计》读书笔记3 重新组织数据
    《重构:改善既有代码的设计》读书笔记2 在对象之间搬移特性
    《重构:改善既有代码的设计》读书笔记1——重新组织函数
  • 原文地址:https://www.cnblogs.com/xiami303/p/3499434.html
Copyright © 2011-2022 走看看