8

我有一个关于 Python 和 unittest 的非常基本的问题。

我有这样的目录结构。

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

现在这是我的 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


不知道如何从另一个不是根文件夹的文件夹中导入文件。

4

3 回答 3

8

更好的解决方案是创建一个 virtualenv 并以开发者模式安装项目。这使您无需重新安装即可修改和执行代码。

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

在测试中,您现在只需包含 fqdn。

从 project.lib.class 导入类

请记住,您将需要使用setuptools来正确定义项目。

于 2013-03-12T01:11:23.823 回答
4

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

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

在 Linux 上,你可以这样做

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

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

于 2013-03-12T01:11:15.430 回答
-1

在TestClass的setUp方法中

添加 :

file_path = Path(__file__).parent.parent / 'lib' / 'class.py'

self.assertTrue(file_path.exists())

spec = spec_from_file_location(file_path.name, location=file_path, loader=None, submodule_search_locations=None)

self.module = module_from_spec(spec)

self.module.__spec__.loader.exec_module(self.module)

使用权:

aclass = self.module.AClass()

或者

AClass = self.module.AClass
aclass = AClass()
于 2018-10-30T07:44:12.860 回答