ModuleNotFoundError when 运行 一个简单的 pytest

ModuleNotFoundError when running a simple pytest

Python 版本 3.6

我有以下文件夹结构

.
├── main.py
├── tests/
|     └── test_Car.py
└── automobiles/
      └── Car.py

my_program.py

from automobiles.Car import Car

p = Car("Grey Sedan")
print(p.descriptive_name())

Car.py

class Car():
    description = "Default"
    
    def __init__(self, message):
        self.description = message

    def descriptive_name(self):
        return self.description

test_Car.py

from automobiles.Car import Car

def test_descriptive_name():
    input_string = "Blue Hatchback"
    p = Car(input_string)
    assert(p.descriptive_name() == input_string)

当从项目根文件夹的命令行中 运行ning pytest 时,出现以下错误-

Traceback:
..\..\..\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests\test_Car.py:2: in <module>
    from automobiles.Car import Car
E   ModuleNotFoundError: No module named 'automobiles'

我已经为此苦苦挣扎了一段时间,我想我遗漏了一些明显的东西。 我认为这与丢失的 __init__.py 没有任何关系 - 我试过在 car.py 文件旁边放置一个空的 __init.py__,错误没有区别。

我需要更改什么才能成功将 test_Car.py 更改为 运行?

您有 2 个选择:

  1. 运行 python -m pytest 而不是 pytest,这也会将当前目录添加到 sys.path(详见 official docs ).

  2. tests/下添加一个__init__.py文件,然后就可以运行 pytest。如果测试存在于应用程序代码之外,这基本上使 pytest 能够发现测试。您可以在官方文档的 Tests outside application code 部分找到有关此内容的更多详细信息。

希望对您有所帮助!