Python单元测试模块抛出“ModuleNotFoundError:没有名为“tests.test_file”的模块“

ppcbkaq5  于 2023-02-07  发布在  Python
关注(0)|答案(5)|浏览(158)

我正在尝试执行一个项目的测试用例,我一直在工作。我曾经成功地执行单元测试,但现在它的错误了。我知道肯定没有更新任何库或路径中的变化。我试图查看源代码,并找出它的错误,但没有运气。任何帮助将不胜感激。
Python版本-3.7.1
样本代码如下

import unittest

class MyTestCase(unittest.TestCase):

def test_dummy(self):
    self.assertEqual(2+2,4)

我在cmd中使用了以下命令来执行测试。
C:\Users\Yadada\Desktop\repo\mwe\mwe>python -m unittest tests\test_file.py
我的文件夹结构是

MWE -|
      |_tests - |
                |_test_file.py

预期的输出是测试成功执行,因为这是一个简单明了的测试。

strclass
ERROR: test_file (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_file
Traceback (most recent call last):
  File "C:\Users\yadada\AppData\Local\Continuum\anaconda3\lib\unittest\loader.py", line 156, in loadTestsFromName
    module = __import__(module_name)
ModuleNotFoundError: No module named 'tests.test_file'

----------------------------------------------------------------------
Ran 1 test in 0.001s
zed5wv10

zed5wv101#

将空__init__.py文件放入测试文件夹后,问题得到解决。
有关其工作原理的详细说明,请参阅What is init.py for?
谢谢@aws_学徒的帮助。

ldioqlga

ldioqlga2#

在PyCharm 2020.2中,“模块未找到错误:在子文件夹中运行单元测试时,如果该子文件夹从被测父文件夹导入模块,则也会发生无模块名为”“的错误。PyCharm默认采用脚本路径来执行测试,但测试失败,例如出现以下错误:

ModuleNotFoundError: No module named '/home/foobar/projects/foo/mypythonproject/moduleundertest'

解决方案是编辑单元测试的run configuration并将单元测试目标从“脚本路径”更改为“模块名称”。

i1icjdpr

i1icjdpr3#

原因是一些库已经在使用该包名,请参见:this stack overflow question about reserved package names
要理解这个问题:重命名这tests软件包到tests_package软件包.(test也是一个保留的软件包名称)
之前:

MWE -|
     |- tests -|
               |- test_file.py

之后:

MWE -|
     |- tests_package -|
                       |- test_file.py

(从python 3.3开始,不再需要__init__.py。)
然后运行python -m unittest tests_package\test_file.py
使用"venv"可以解决tests软件包名称问题,但不能解决test问题
也许一个更加Python化的解决方案是,通过给项目一个唯一的模块名,使项目不在"root"下运行,从而使您不必为tests目录使用Python库未使用的包名。例如:

GitFolderOfProject -|
                    |- MWE -|
                            |- tests -|
                                      |- test_file.py

然后从"GitFolderOfProject"中以python -m unittest MWE\tests\test_file.py运行测试

xfb7svmp

xfb7svmp4#

对我来说,解决办法是补充:

if __name__ == '__main__':
    unittest.main()

放到我测试文件的最后。
然后我就可以跑了:

python -m <test-file>

还需要从python -m命令中删除.py后缀:
有关详细信息,请参见this answer

x8diyxa7

x8diyxa75#

这是一个简单的魔术设置。
首先-在PyCharm中:
1.右键单击包含测试的文件夹(在项目树中)-将此文件夹标记为“测试文件夹”。
1.右键单击包含源文件的文件夹(在项目树中)-将此文件夹标记为“源文件夹”。
1.删 debugging 误的“运行配置”(或不删除,由您选择)。
1.右键单击测试文件夹(已标记为“测试文件夹”)-选择“运行”。
就这些。真的很简单。合乎逻辑。我花了大约一个小时才弄明白。

相关问题