如何正确导入包py.测试?

2024-07-02 09:59:42 发布

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

我有以下布局:

/spamalot
    /spam
        __init__.py
        spam.py
        /spam_on_eggs
            __init__.py
            spam_on_eggs.py
    /tests

        test_spam.py

垃圾邮件正好是一个瓶子应用程序。在

spam.py

^{pr2}$

这很好用-从spamalot目录我可以运行python spam/spam.py

然而,当我开始把测试放在混合中时,就没有那么棒了。在

在我的test_spam.py文件中,我有:

import spam.spam
test_client = spam.spam.app.test_client()

def test_it_fails():
     assert False

但是,它没有在我预期的地方失败,而是在导入行中失败:

/spamalot/ $ py.test
# some output
E    ImportError

我可以通过将__init__.py放在/tests文件夹中来解决这个问题,但是我得到了另一个重要错误:

spam/spam.py:1: in <module>
>    import spam_on_eggs.spam_on_eggs as eggs
E    ImportError: No module named 'spam_on_eggs'

我可以把这条线改为:

from spam.spam_on_eggs import spam_on_eggs

这允许我测试但是然后我破坏了运行$ python spam/spam.py的能力,因为我得到

ImportError: no module named 'spam'

显然,我对模块导入的工作原理和方式的理解存在差距py.测试适用于此系统。在

我错过了什么?在

有没有可能有我所描述的布局-并能运行两者py.测试我的服务器在spamalot目录中?在


Tags: pytestimport目录clientinitontests
1条回答
网友
1楼 · 发布于 2024-07-02 09:59:42

在py.测试将始终使用包含__init__.py的最短目录路径。在

将一个__init__.py放入spamalot,您就可以导入spamalot.spam.spam。在

参考号:choosing a test layout

相关问题 更多 >