我有以下布局:
/spamalot
/spam
__init__.py
spam.py
/spam_on_eggs
__init__.py
spam_on_eggs.py
/tests
test_spam.py
垃圾邮件正好是一个瓶子应用程序。在
在spam.py
内
这很好用-从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目录中?在
在py.测试将始终使用包含
__init__.py
的最短目录路径。在将一个
__init__.py
放入spamalot,您就可以导入spamalot.spam.spam
。在参考号:choosing a test layout
相关问题 更多 >
编程相关推荐