Python ModuleNotFoundError测试套件(导入错误)

2024-09-27 22:22:33 发布

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

当我运行一个包含一些测试的文件时(例如pythontest\u网站_载荷.py)测试运行良好,没有问题,但是当我尝试testsuite(例如python测试)时_套房.py),发生下一个错误:

    from special_module.special_module_file import Special_Class
ModuleNotFoundError: No module named 'specialmodule'

我的目录如下:

^{pr2}$

在我的special_module_文件中,我有一个名为special_class的类,我正在我的test_网站中导入这样的目录_载荷.py作为:

^{3}$

我的测试_套房.py代码为:

import unittest
import HtmlTestRunner
from tests.test_website_loads import Test_Website_Loads

init_tests = unittest.TestLoader().loadTestsFromTestCase(Test_Website_Loads)

test_suite = unittest.TestSuite([
    init_tests
])

runner = HtmlTestRunner.HTMLTestRunner(output='reports', report_title='Test Report')
runner.run(test_suite) 

以及我的测试网站_载荷.py代码为:

import unittest
import HtmlTestRunner
from special_module.special_module import Special_Class

class Test_Website_Loads(unittest.TestCase):

    def setUp(self):
        special = Special_Class()

    def ...():
        ...

    def tearDown():
        ...

if __name__ == "__main__":

    unittest.main(
        testRunner=HtmlTestRunner.HTMLTestRunner(output='init')
    )

总之,有3个文件(A、B、C)。A调用B,B调用C。当我运行B时,它正确地导入C。但是当运行A时,B抛出ModuleNotFoundError。在


Tags: 文件frompytestimport网站testsunittest
1条回答
网友
1楼 · 发布于 2024-09-27 22:22:33

这是因为它位于tests目录中,但是您正在从tests的父目录运行{}。当您运行test_website_loads.py时,它之所以起作用,是因为您是从tests目录中运行它的。解析导入时,Python解释器检查模块的一系列位置,从当前目录开始,然后移动到其他位置,例如PYTHONPATH环境变量中的位置,以及Python安装位置中的site-packages目录。在

我在我的系统上复制了这个,但是将import语句改为tests.special_module.special_module_file,它起作用了。如果您不喜欢这个解决方案,您将需要更改special_module目录或{a1}或类似的位置。在

编辑:对于您下面的评论,我假设您的test_suite.py文件如下所示:

from tests.test_website_loads import some_function, some_class

result = some_function()
obj = some_class()

这仍然会遇到上述问题,因为Python解释器仍在顶层目录中运行。当它搜索模块时,它会搜索当前目录,其中只找到test_suite.py和{}。然后检查PYTHONPATH环境变量。如果仍然找不到任何内容,它将检查依赖于安装的默认位置(例如site-packages目录),如果没有找到这样的模块,它将抛出异常。我认为最好的解决方案是将special_module添加到PYTHONPATH环境变量中,如我在上面的链接中所述。否则,可以使用ln -s tests/special_module special_module在顶层目录中创建一个指向模块的符号链接,假设您运行的是类UNIX系统。但是,这不被视为最佳实践;首选第一种方法。在

相关问题 更多 >

    热门问题