How do you generate dynamic (parameterized) unit tests in python?

后端 未结 25 2631
面向向阳花
面向向阳花 2020-11-22 07:09

I have some kind of test data and want to create a unit test for each item. My first idea was to do it like this:

import unittest

l = [[\"foo\", \"a\", \"a\         


        
25条回答
  •  被撕碎了的回忆
    2020-11-22 07:22

    Besides using setattr, we can use load_tests since python 3.2. Please refer to blog post blog.livreuro.com/en/coding/python/how-to-generate-discoverable-unit-tests-in-python-dynamically/

    class Test(unittest.TestCase):
        pass
    
    def _test(self, file_name):
        open(file_name, 'r') as f:
            self.assertEqual('test result',f.read())
    
    def _generate_test(file_name):
        def test(self):
            _test(self, file_name)
        return test
    
    def _generate_tests():
        for file in files:
            file_name = os.path.splitext(os.path.basename(file))[0]
            setattr(Test, 'test_%s' % file_name, _generate_test(file))
    
    test_cases = (Test,)
    
    def load_tests(loader, tests, pattern):
        _generate_tests()
        suite = TestSuite()
        for test_class in test_cases:
            tests = loader.loadTestsFromTestCase(test_class)
            suite.addTests(tests)
        return suite
    
    if __name__ == '__main__':
        _generate_tests()
        unittest.main()
    

提交回复
热议问题