当前位置: 首页 > 面试题库 >

如何从python中的测试模块导入src

禹昊穹
2023-03-14
问题内容

我有一个要测试使用的应用程序,unittest但是有一些问题。我的目录结构如下:

root_dir
├── src
│   ├── cmds
│   │   ├── baz.py
│   │   ├── __init__.py
│   │   └── bar.py
│   └── foo.py
└── tests
    ├── cmds.py
    └── __init__.py

我想测试中的bazbar模块,cmds然后尝试做

root_dir> python2.7 -m unittest tests.cmds

但是在tests.cmds我不能导入cmds我的src目录包。

我该如何工作?

基本上,我想从测试的应用程序root_dirsrctests单独的目录。

我尝试将追加srcsys.path,但是当我cmds.baz从导入时,tests/cmds.py我仍然AttributeError: 'module' object has no attribute 'cmds'从unittest得到一个。

编辑:我的导入和sys.path声明是:

import sys
sys.path.append('../src')
from cmds.baz import about

回溯

Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/unittest/__main__.py", line 12, in <module>
    main(module=None)
  File "/usr/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/usr/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/usr/lib/python2.7/unittest/loader.py", line 128, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'cmds'

问题答案:

要做的一件非常错误的事情是在上附加一个相对路径sys.path。如果要确定路径,请进行以下操作:

# assuming that the code is in test's __init__.py
import os
import sys
sys.path.insert(0, os.path.abspath( os.path.join(os.path.dirname(__file__), 
                                               '../src/') ))
# now you can be sure that the project_root_dir/src comes first in sys.path


 类似资料:
  • 问题内容: 如何测试是否已在python中导入模块? 例如,我需要基础知识: 也 谢谢! 感谢您的所有评论 问题答案: 如果您不想通过两次导入来进行优化,请避免麻烦,因为Python已经解决了这一问题。 如果您 需要 避免此类情况:修正草率的编码- 确保不需要,即在使用之前定义(导入)所有内容(在导入的情况下:一次,在启动时,在模块级别) 。 如果您确实有充分的理由:是一个包含所有已导入到某处的模

  • 问题内容: 目录结构: module1.py: 我如何才能将所有模块从模块添加到主类而没有前缀(即像foo = fooBar()一样使用它们,而不是foo = my_modules.module1.fooBar())。 一个明显的决定是在main.py中编写如下内容: 但是我不想在创建新的moduleN时更改main.py。有解决方案吗? 我确实知道导入这样的类不是一个好主意,但是我对此仍然很好奇

  • 我是新的Python,我已经安装在C:\ INFO2013-07-08 08:15:47,197server.py:593]默认:"GET/HTTP/1.1"500-INFO2013-07-08 08:28:22,289api_server.py:509]应用所有挂起的事务并保存数据存储INFO2013-07-08 08:28:22,289api_server.py:512]保存搜索索引2013-

  • 我有一个这样的目录: 我可以这样导入父模块: 那么,既然我已经有了父模块,那么获取子模块的最佳方法是什么?我已经尝试了,,等。 有什么建议吗? 谢谢

  • 问题内容: 我已尝试找到有关最佳使用还是全面的指南。我刚开始使用Python,并且正在尝试着眼于最佳实践。 基本上,我希望有人能分享他们的经验,其他开发人员有什么喜好,以及避免遇到麻烦的最佳方法是什么? 问题答案: 和之间的区别主要是主观的。选择最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助你做出决定。 优点: - 减少维护你的import报表。无需添加任何其他导入即可开始使用模块中的另

  • 问题内容: 我的内存中有一些Python文件,可能是StringIO。如何导入存储在内存中的模块文件?我不想将其保存到磁盘然后加载。 看起来像: 问题答案: 一种不错的方法是使用PEP 302中所述的自定义元导入挂钩。可以编写一个从字符串字典动态导入模块的类: 顺便说一句:如果您不想太多,而只想导入一个字符串,那么请坚持执行load_module方法。您只需要在里面。