我们有一个使用nose和factory_boy的测试框架。
根据建议,我们已将/ test目录放在每个模块目录中,以及我们放置一个factories.py文件和各种测试用例的位置。
我遇到的挑战是尝试在这些测试子模块之间导入工厂和功能。完整的代码分支在这里:
https://github.com/bethlakshmi/GBE2/tree/GBE-471
如果我没有传达足够的细节以便有用。
相关结构的摘要是:
/gbe
__init__.py
tests.py
(many more files)
/tests
__init__.py
factories.py
functions.py
(many files of tests, all tests_*)
/ticketing
__init__.py
tests.py
/tests
__init__.py
factories.py
test_edit_event.py
在最后一个文件夹中发生了问题。
我似乎无法从gbe.tests导入任何东西,我想重用在factories.py中提供的模拟和functions.py中的函数
无论我尝试什么,始终以以下两种形式产生:
Traceback (most recent call last):
File "/Users/bethlakshmi/Documents/mysite/GBE2/expo/ticketing/test/test_edit_event.py", line 27, in setUp
self.privileged_user = gbe_tests.factories.ProfileFactory.create().user_object
AttributeError: 'module' object has no attribute 'factories'
或类似的东西:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/nose/loader.py", line 420, in loadTestsFromName
addr.filename, addr.module)
File "/Library/Python/2.7/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/Library/Python/2.7/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/Users/bethlakshmi/Documents/mysite/GBE2/expo/ticketing/test/test_edit_event.py", line 12, in <module>
import gbe.tests.factories as gbe_fact
ImportError: No module named factories
我试图运行的命令是:
./ manage.py test ticket
据我所知,对于代码来说,gbe.tests的内部内容并不存在。我没有问题导入gbe.models,gbe.views,gbe.functions等。我也没有问题/票务
我已经阅读了stackoverflow中的每个问题,但我没有成功。
90%的已接受答案似乎是&#34;确保您拥有 init .py&#34; - 在我的情况下已经是这样了。
我也试过搞乱系统路径,但没有成功。
你会看到我在票务/ tests / factories.py中重复了我想要嘲笑的工厂 - 这是我在票务运行中获得测试的唯一方法,我拒绝如果我可以提供帮助,我会在办理登机手续时打破测试。
我已经尝试删除这些类,并且上面的错误占上风 - 当我可以重构删除这些冗余代码时,我会非常高兴地这样做。
我错过了什么?
答案 0 :(得分:2)
问题在于您的包结构:
/gbe
__init__.py
tests.py
/tests
__init__.py
factories.py
functions.py
您有一个文件tests.py
和一个包tests
。现在,当您想要from gbe.tests import x
python解释器时,不知道您是要从文件还是包中导入,默认情况下会尝试从该文件导入。
要解决此问题,我建议您移动并将tests.py
重命名为tests
包。
请注意,惯例是将tests文件夹放在主应用程序文件夹之外,例如flask。我个人使用以下结构进行测试:
/tests
/my_app
test_views.py
/integration
/factories
/fixtures
mocks.py
/my_app
views.py
所以我有一个tests/my_app
文件夹,我复制my_app的结构 - 我只在那里放置单元测试。
我还有tests/integration
文件夹,我不会复制my_app的结构 - 我在那里使用不同的命名。
我将工厂类和灯具分组在一个单独的文件夹中,如果我愿意,我可以在我的所有测试中使用它们。