为什么仅在使用pytest进行单元测试时找不到模块?

Why is module not found only when doing unit testing with pytest?

我在单元测试中遇到问题 运行。我有一个这样的项目结构:

给出这个目录

who-said-what/
    |
    |_ wave_encoder.py
    | 
    |_ tests/
        |_ test_wave_encoder.py

其中 test_wave_encoder.py 看起来像这样:

from wave_encoder import *

class TestEncoder():
    def test_plot_no_fit1(self):
        encoder = WaveEncoder()
        self.assertRaises(ValueError, encoder.plot_signal)

    def test_plot_no_fit2(self):
        encoder = WaveEncoder()
        self.assertRaises(ValueError, encoder.plot_transform)

    def test_plot_no_fit3(self):
        encoder = WaveEncoder()
        self.assertRaises(ValueError, encoder.plot_components)

如果我运行单独测试这个文件,没有问题。但是,如果我尝试从项目中的任何目录 运行 pytest:

pytest -v --cov ./tests 
# or
pytest -v --cov .

我得到一个ModuleNotFoundError: No module named 'wave_encoder'

但是,如果我将 test_wave_encoder.py 移动到父目录,它确实有效(还有其他错误,但那是另一个问题)。

我真的不想要父目录中的一堆测试文件。我该如何解决这个问题?

第 1 步:在您的根目录中放置一个空 conftest.py。 第 2 步:运行 使用 python -m pytest

从根文件夹进行测试

应该可以。