zoukankan      html  css  js  c++  java
  • unittest改写传参方法

    Python主要讲究简洁简单使用,所以它不像junit一样支持参数化测试,需要改装一下也可以传参。直接上代码实例

    [python] view plain copy
     
    1. import unittest    
    2. class ParametrizedTestCase(unittest.TestCase):    
    3.     """ TestCase classes that want to be parametrized should  
    4.         inherit from this class.  
    5.     """    
    6.     def __init__(self, methodName='runTest', param=None):    
    7.         super(ParametrizedTestCase, self).__init__(methodName)    
    8.         self.param = param    
    9.     @staticmethod    
    10.     def parametrize(testcase_klass, param=None):    
    11.         """ Create a suite containing all tests taken from the given  
    12.             subclass, passing them the parameter 'param'.  
    13.         """    
    14.         testloader = unittest.TestLoader()    
    15.         testnames = testloader.getTestCaseNames(testcase_klass)    
    16.         suite = unittest.TestSuite()    
    17.         for name in testnames:    
    18.             suite.addTest(testcase_klass(name, param=param))    
    19.         return suite    
    20.     
    21.     
    22. #####################################################    
    23. ##用法-testcase    
    24. class TestOne(ParametrizedTestCase):    
    25.     def test_something(self):    
    26.         print 'param =', self.param    
    27.         self.assertEqual(1, 1)    
    28.      
    29.     def test_something_else(self):    
    30.         self.assertEqual(2, 2)    
    31.              
    32. ##用法-测试    
    33. suite = unittest.TestSuite()    
    34. suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=42))    
    35. suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=13))    
    36. unittest.TextTestRunner(verbosity=2).run(suite)    
    37.      
    38. #结果    
    39. test_something (__main__.TestOne) ... param = 42    
    40. ok    
    41. test_something_else (__main__.TestOne) ... ok    
    42. test_something (__main__.TestOne) ... param = 13    
    43. ok    
    44. test_something_else (__main__.TestOne) ... ok    
    45.      
    46. ----------------------------------------------------------------------    
    47. Ran 4 tests in 0.000s    
    48.      
    49. OK    

    或者可以使用meta类来 解决这个问题

    [python] view plaincopy
     
     
      1. import unittest  
      2. l = [["foo", "a", "a",], ["bar", "a", "a"], ["lee", "b", "b"]]  
      3. class TestSequenceMeta(type):  
      4. def __new__(mcs, name, bases, dict):  
      5. def gen_test(a, b):  
      6. def test(self):  
      7. self.assertEqual(a, b)  
      8. return test  
      9. for tname, a, b in l:  
      10.             test_name = "test_%s" % tname  
      11.             dict[test_name] = gen_test(a,b)  
      12. return type.__new__(mcs, name, bases, dict)  
      13. class TestSequence(unittest.TestCase):  
      14.     __metaclass__ = TestSequenceMeta  
      15. if __name__ == '__main__':  
      16.     unittest.main()  

    转载自:http://blog.csdn.net/hqzxsc2006/article/details/50125735

  • 相关阅读:
    强人工智能基本问题:全局控制与自组织
    程序员,为未来准备好了吗?
    强人工智能基本问题:自上而下,还是自下而上。
    强人工智能基本问题:神经网络分层还是不分层
    什么阻碍了强人工智能的发展
    人类和强人工智能的关系(人类会被灭掉吗?)
    为什么需要强人工智能
    神经网络和机器学习、强人工智能
    重新开张!
    Xcode文件乱序
  • 原文地址:https://www.cnblogs.com/wozijisun/p/7182549.html
Copyright © 2011-2022 走看看