Created
March 5, 2019 20:47
-
-
Save dsoike/4453b06b041dd3df782dc6fbbf8dfbc1 to your computer and use it in GitHub Desktop.
Run Python Unit Tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import sys | |
import imp | |
import inspect | |
import re | |
import unittest | |
PWD = os.environ.get('PWD') | |
def run_unit_tests(): | |
print('Running Unit Tests') | |
files = _get_unit_test_files() | |
print('\n'.join(map(lambda x: x.replace(PWD, ''), files)) + '\n') | |
_run_unit_tests_for_files(files) | |
def _get_unit_test_files(): | |
all_files = _get_all_unit_test_files() | |
query = sys.argv[1] if len(sys.argv) > 1 else None | |
if query is None: | |
return all_files | |
else: | |
return filter(lambda x: re.search(query, x), all_files) | |
def _get_all_unit_test_files(): | |
# logic here is project specific | |
unit_test_files = [] | |
src_dir = '{}/workspace/src'.format(PWD) | |
for package_name in os.listdir(src_dir): | |
package_dir = '{}/{}'.format(src_dir, package_name) | |
package_tests_dir = '{}/src/{}_tests'.format(package_dir, package_name) | |
if os.path.isdir(package_tests_dir): | |
for test_file_name in os.listdir(package_tests_dir): | |
if re.search('.unit.py$', test_file_name): | |
unit_test_files.append('{}/{}'.format(package_tests_dir, test_file_name)) | |
return unit_test_files | |
def _run_unit_tests_for_files(files): | |
test_suite = unittest.TestSuite() | |
for filepath in files: | |
module = imp.load_source('module', filepath) | |
classes = inspect.getmembers(module, inspect.isclass) | |
for name, value in classes: | |
if re.search('TestCase$', name): | |
for method in dir(value): | |
if method.startswith('test'): | |
test_suite.addTest(value(method)) | |
test_runner = unittest.TextTestRunner(verbosity=2, resultclass=unittest.TextTestResult) | |
result = test_runner.run(test_suite) | |
if not result.wasSuccessful(): | |
sys.exit(1) | |
if __name__ == '__main__': | |
run_unit_tests() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment