在 Python3 中运行 unittest 导入错误

Ser*_*lvo 5 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
Run Code Online (Sandbox Code Playgroud)

它使用以下导入语句在我的应用程序中工作(但是,没有工作测试)b.py

from a import *
Run Code Online (Sandbox Code Playgroud)

但是,它在我的应用程序中不起作用(但是,可以进行测试)在b.py以下内容中使用另一个:

from .a import *
Run Code Online (Sandbox Code Playgroud)

所以,我选择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)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的导入语句test_b.py如下所示:

from unittest import TestCase
from app.cell import *
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*lvo 4

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

project/
    module/
        __init__.py
        a.py
        b.py
    test/
        test_a.py
        test_b.py
    main.py
Run Code Online (Sandbox Code Playgroud)

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

main.py

from module.b import Something
Run Code Online (Sandbox Code Playgroud)

b.py

from .a import Something
Run Code Online (Sandbox Code Playgroud)

a.py

from unittest import TestCase
from module.a import Something
Run Code Online (Sandbox Code Playgroud)

test_b.py

from unittest import TestCase
from module.a import Something
from module.b import Something
Run Code Online (Sandbox Code Playgroud)

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