为什么仅在使用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
从根文件夹进行测试
应该可以。
我在单元测试中遇到问题 运行。我有一个这样的项目结构:
给出这个目录
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
应该可以。