如何从python中的unittest导入一个类?

toy*_*toy 6 python unit-testing

我有一个关于Python和unittest的基本问题.

我有这样的目录结构.

Project
   |
   |-lib
      |
      |-__init__.py
      |-class.py
   |
   |-tests
      |
      |-__init__.py
      |-test_class.py
Run Code Online (Sandbox Code Playgroud)

现在这是我的test_class.py的内容.如果我从根文件夹导入lib.class它工作正常.但是,如果我从其他地方导入文件,它就无法正常工作.


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()

当我运行测试时,我收到了这个错误


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


不确定如何从另一个不是根文件夹的文件夹导入文件.

ean*_*son 9

我不认为这是处理这个问题的最有效或最安全的方法,但这就是我在我的库中添加库的方法unittesting.

import unittest, os, sys
sys.path.append(os.path.abspath('..'))
from lib.class import Class
Run Code Online (Sandbox Code Playgroud)

这实际上将前一个文件夹添加到可访问资源列表中,然后使用它来包含父文件夹lib.

或者你可能会做类似的事情import .. from lib.class.请查看此处了解有关相关进口的更多信息.


小智 5

修改sys.path以包含项目目录

import sys
sys.path.append('/path/to/Project')
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,你可以这样做

import sys, os
sys.path.append(os.path.abspath(sys.path[0]) + '/../')
Run Code Online (Sandbox Code Playgroud)

并且应该包括正在运行的 Python 测试脚本之上的目录,即 Project 文件夹