GAEUnitで再帰的にテストする方法

* 追記バグを発見しました。ディレクトリが同一階層に複数置かれていると、全てのテストが実行されません。下記修正済みです。
-- 
Jun 16th, 2011 --

昨日触ってみたGAEUnitで、「test」ディレクトリから再起的にテストを実行するやり方がわからなかったので、簡単に「あるディレクトリから再起的にTestSuiteを組み立てる」というコードを書いてみました。これをGAEUnitに組み込めば、再起的にテストできます。

import os
import unittest

def main():
    target_dir = ‘test'
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()
    modules = get_modules_recursively(target_dir)
    for module in modules:
        suite.addTest(loader.loadTestsFromModule(module))
    if suite.countTestCases() == 0:
        print(‘There are no tests in the [%s] directory.' % target_dir)
        exit()
    runner = unittest.TextTestRunner()
    runner.run(suite)

def get_modules_recursively(target_dir):
    modules = []
    sub_modules = []
    for file_name in os.listdir(target_dir):
        target_path = ‘%s/%s' % (target_dir, file_name)
        if os.path.isdir(target_path):
            sub_modules = get_modules_recursively(target_path)
            sub_modules.extend(get_modules_recursively(target_path))
        if file_name.endswith(‘.py'):
            module_name = os.path.splitext(file_name)[0]
            module_path = os.path.splitext(target_path)[0]
            modules.append(__import__(
                module_path.replace(‘/', ‘.'), [], [], module_name))
    if sub_modules:
        # Append tests in sub directories after adding tests of the target directory.
        modules.extend(sub_modules)
    return modules

if __name__ == ‘__main__':
    main()

この記事が役に立った場合、シェアしていただけると励みになります!!