Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to import a class from unittest in python?

I have a very basic question about Python and unittest.

I have a directory structure like this.

Project
   |
   |-lib
      |
      |-__init__.py
      |-class.py
   |
   |-tests
      |
      |-__init__.py
      |-test_class.py

Now this is my content of test_class.py. If I import the lib.class from the root folder it's working fine. But if I import the file from somewhere else it's not working.


import unittest
from lib.class import Class

class TestClass(unittest.TestCase):
    def testClass(self):
            // do some test

def main():
    unittest.main()

if __name__ == '__main__':
    main()

When I run the test I got this error


Traceback (most recent call last):
  File "tests/test_class.py", line 2, in 
    from lib.class import Class
ImportError: No module named lib.class


Not sure how do I import the file from another folder that's not the root folder.

like image 934
toy Avatar asked Mar 12 '13 01:03

toy


2 Answers

The better solution is to create a virtualenv and install the project in developer mode. This allows you to modify and execute code without having to re-install it.

virtualenv venv
source venv/bin/activate
pip install -e .

Inside the tests you would now simply include the fqdn.

from project.lib.class import Class

Keep in mind that you will need to use setuptools to properly define the project.

like image 174
eandersson Avatar answered Sep 20 '22 16:09

eandersson


Modify sys.path to include the Project directory

import sys
sys.path.append('/path/to/Project')

On Linux, you could do

import sys, os
sys.path.append(os.path.abspath(sys.path[0]) + '/../')

and that should include the directory above the running Python testing script, which is the Project folder

like image 27
Josh Austin Avatar answered Sep 19 '22 16:09

Josh Austin