导入错误在Python3中运行unittest

时间:2017-06-01 18:55:23

标签: python python-3.x python-unittest

我在使用Python 3.6导入文件时遇到问题。我的目录树如下:

project/
    app/
    ├── __init__.py
    ├── a.py
    └── b.py
    test/
    ├── __init__.py
    ├── test_a.py
    └── test_b.py

它使用b.py中的以下import语句来运行我的应用程序(但是,无法运行测试):

from a import *

但是,在b.py中使用另一个应用程序(但是,运行测试)它不起作用:

from .a import *

所以,我选择from a import *。像python3 -m unittest一样执行测试我总是得到以下错误:

E.
======================================================================
ERROR: tests.test_cell (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_cell
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 428, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 369, in _get_module_from_name
    __import__(name)
  File "/Users/serrodcal/Repositories/project/tests/test_b.py", line 2, in <module>
    from app.b import *
  File "/Users/serrodcal/Repositories/project/app/b.py", line 1, in <module>
    from a import *
ModuleNotFoundError: No module named 'a'


----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (errors=1)

在这种情况下,test_b.py中的导入声明如下:

from unittest import TestCase
from app.cell import *

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

我对Python中的导入以及python如何使用模块感到困惑。

project/
    module/
        __init__.py
        a.py
        b.py
    test/
        test_a.py
        test_b.py
    main.py

这是我的新目录树。包含的文件是:

main.py

from module.b import Something

b.py

from .a import Something

a.py

from unittest import TestCase
from module.a import Something

test_b.py

from unittest import TestCase
from module.a import Something
from module.b import Something

像这样,它运行良好,应用程序和测试。