unittest改写传参方法

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

  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. ##用法-testcase
  22. class TestOne(ParametrizedTestCase):
  23. def test_something(self):
  24. print 'param =', self.param
  25. self.assertEqual(1, 1)
  26. def test_something_else(self):
  27. self.assertEqual(2, 2)
  28. ##用法-测试
  29. suite = unittest.TestSuite()
  30. suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=42))
  31. suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=13))
  32. unittest.TextTestRunner(verbosity=2).run(suite)
  33. #结果
  34. test_something (__main__.TestOne) ... param = 42
  35. ok
  36. test_something_else (__main__.TestOne) ... ok
  37. test_something (__main__.TestOne) ... param = 13
  38. ok
  39. test_something_else (__main__.TestOne) ... ok
  40. ----------------------------------------------------------------------
  41. Ran 4 tests in 0.000s
  42. OK

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

    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

上一篇:.net通用权限框架C/S概览


下一篇:CentOS CVS安装使用