假设我有一个与以下模块: def main(): pass if __name__ == "__main__": main() 我想写一个下半部的unit testing(我想达到100%的覆盖率)。 我发现执行import / __name__机制的runpy builtin模块,但是我不知道如何模拟或者检查main()函数是否被调用。 这是我迄今为止所尝试的: import runpy import mock @mock.patch('foobar.main') def test_main(self, main): runpy.run_module('foobar', run_name='__main__') main.assert_called_once_with()
这是一个经常以不同forms提出的问题,经常会得到“哈哈,你做得不好”的反应。 可以肯定的是,这是因为人们(包括我)试图用作实现的常识情况,解决scheme并不明显(如果以前没有这样做的话)。 会接受“让飞出瓶子”的答案。 特定 project/ __init__.py /code __init__.py sut.py /tests __init__.py test_sut.py tests_sut.py开始的地方: import code.sut 在根目录下运行nosetests导致: ImportError: No module named code.sut 途径: a)做一个相对的使用 from ..code import sut b)将项目的根添加到PYTHONPATH c)使用 sys.path.append 在每个testing模块开始时的导入之前添加..path。 d)只记得做一个 setup.py 在运行testing之前将模块安装到站点包中。 所以要求testing位于可以访问项目的testing包根目录下。 上面的每个人都不觉得“自然”,已经certificate有问题,或者看起来像太辛苦了! 在Java中,这个工作,但基本上是由你的构build工具/ IDE的所有类放在类path。 也许问题是我期待Python的“魔力”? 在Flask webframeworktesting中注意到,选项d)似乎是首选。 无论如何,下面推荐一个首选解决scheme的陈述将会消除我自己的“不自然”的感觉。
在Python脚本中检查程序包是否安装的好方法是什么? 我知道翻译很容易,但我需要在脚本中完成。 我想我可以检查系统中是否有安装过程中创build的目录,但我觉得有一个更好的方法。 我试图确保Skype4Py软件包已安装,如果没有,我会安装它。 我完成检查的想法 检查典型安装path中的目录 尝试导入包,如果抛出exception,则安装包
模块A在其顶部包含import B 然而,在testing条件下,我想嘲笑 B (模拟AB ),完全避免导入B 实际上, B不是故意安装在testing环境中的。 A是被testing的单元。 我必须导入A的所有function。 B是我需要模拟的模块。 但是,如果A的第一个东西是导入B,我怎么能在A中模拟B,并停止A导入真实的B? (B没有安装的原因是我用pypy进行快速testing,不幸的是B还不兼容pypy。) 这怎么可能呢?
我似乎无法得到鼻子testing框架识别文件结构中我的testing脚本下面的模块。 我已经设置了最简单的例子来演示这个问题。 我会在下面解释。 这是包文件结构: ./__init__.py ./foo.py ./tests ./__init__.py ./test_foo.py foo.py包含: def dumb_true(): return True tests / test_foo.py包含: import foo def test_foo(): assert foo.dumb_true() 两个init .py文件都是空的 如果我在主目录(foo.py所在的位置)运行nosetests -vv ,我会得到: Failure: ImportError (No module named foo) … ERROR ====================================================================== ERROR: Failure: ImportError (No module named foo) ———————————————————————- Traceback (most recent call last): File "/usr/lib/python/site-packages/nose-0.11.1-py2.6.egg/nose/loader.py", line 379, in […]
假设我有以下目录结构: a\ __init__.py b\ __init__.py c\ __init__.py c_file.py d\ __init__.py d_file.py 在a包的__init__.py , c包被导入。 但是c_file.py导入abd 。 程序失败,当c_file.py尝试导入abd时,说b不存在。 (而且它确实不存在,因为我们正在导入它。) 这个问题怎么解决?
如何根据相对path导入Python模块? 例如,如果dirFoo包含Foo.py和dirBar ,并且dirBar包含Bar.py ,那么如何将Bar.py导入到Foo.py ? 这是一个视觉表示: dirFoo\ Foo.py dirBar\ Bar.py Foo希望包含Bar ,但重构文件夹层次结构不是一种select。