简体   繁体   中英

Python: Unit Testing Module and Relative Imports

Currently have the following file hierarchy:

\package
    __init__.py
    run_everything.py

    \subpackage
        __init__.py
        work.py
        work1.py
        work2.py

    \test
        __init__.py
        test_work.py
        test_work1.py

My first question is regarding relative imports. Suppose in \\subpackage\\work.py I have a function called custom_function(), and I would like to test that function in test_work.py. For some reason I can not figure out how to make this import from one module to another. Trying from .. subpackage.work1 import custom_function() does not seem to work, and yields the error Attempted relative import in non-package Is there any way to resolve this?

2) I would like to run all test files from run_everything.py with one function, would adding a suite() function in each test_work*.py file, which adds each unit_testing class to suite.addTest(unittest.makeSuite(TestClass)), and finally importing them into the top-level run_everything.py be the most conventional way in Python2.7?

Here is a hack*
Insert the path's to "subpackage" and "test" to your python path in run_everything using:

import sys
    sys.path.insert(0, '/path/to/package/subpackage')
    sys.path.insert(0, '/path/to/package/test')

And then, you can import all your files using vanilla imports in run_everything:

import work, work1, work2
    import test_work, test_work1

*This won't permanently affect your PYTHONPATH. *Don't forget to down-vote me for hard-coding :(

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM