python-unittest-importorror:开始目录不是importab

2024-04-27 05:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在跟踪python unittest进行一些测试,并使用discover函数将测试打包到一个套件中。 但是,当我尝试使用unittest运行测试时,会出现以下错误:

Traceback (most recent call last):
   File "D:/Project/run_tests.py", line 12, in <module>
     suite2 = unittest.defaultTestLoader.discover(dir2, pattern='test*.py')
   File "C:\Python\Python36-32\lib\unittest\loader.py", line 338, in discover
     raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: 'D:\\Project\\dir2'

run_tests.py的外观如下:

import unittest

if __name__ == "__main__":

    dir1 = "./test1"
    suite1 = unittest.defaultTestLoader.discover(dir1, pattern='test*.py')
    runner1 = unittest.TextTestRunner()
    runner1.run(suite1)


    dir2 = "./tes2"
    suite2 = unittest.defaultTestLoader.discover(dir2, pattern='test*.py')
    runner2 = unittest.TextTestRunner()
    runner2.run(suite2)

Tags: runinpytestprojectlinetestsunittest
3条回答

我在CI管道上也遇到过类似的问题。在我的例子中,有一个级别的间接文件夹/topleveldirectory/tests

所以我在unittest命令中添加了-s:

python -m unittest discover -s folder/topleveldirectory/tests

有一个similar question with a helpful answer here

但是,如果在Linux中使用类似于PyCharm的IDE并在soft-linked目录中打开文件,则可能会发生这种情况。运行测试的编辑器似乎对同一个模块的两条路径感到困惑,并说其中一条不存在。把它放在一个位置,没有任何软链接为我修复了这个。

有一个非常相似的错误,但没有涉及符号链接。

这是我的目录布局。

- project root
  - foo
  - bar
  - test

foo和bar被认为是顶级包,其中test是所有的测试用例。

在intellij中运行unittest时,我使用了以下参数:

  • 目标:设置到test文件夹的脚本路径
  • 工作指导是项目的根本。

这个设置给了我一个Start directory is not importable错误。

我跟踪了unittest.loader.py中的源代码,发现它检查测试文件夹中的__init__.py。所以解决方法是在我的test文件夹中添加一个__init__.py。希望这能帮助别人。

--编辑--

我在Python3.6,MacOSX上

相关问题 更多 >