我使用nose进行测试收集,还想使用它的doctest插件。我有一个模块,它需要一个fixture才能被导入。因此,我不能使用nose的模块夹具,因为它们是从被测模块加载的。有没有一种方法可以在模块外为nose doctest指定模块夹具?在
对于某些用例,一个选项是检测在doctest下运行,并在模块开始时应用fixture。我也很想知道这个用例的答案。在
但是,在某些情况下,这是不起作用的:当导入由于SyntaxError
而失败时,就不会运行任何模块代码。在我的例子中,我主要是开发既与python2和python3兼容的代码(没有2to3
)。但是,有一些特定于python3的模块,在python2下运行时根本不应该通过nose检查这些模块。我最好的选择是什么?在
编辑:MWE(针对SyntaxError
情况)
我有一个包含许多小模块的包,其中一些模块使用python3语法。 包的结构如下:
~/pckg/
__init__.py
py3only.py
... (other modules)
tests/
test_py3only.py
有些测试被写成unittest.TestCase
,但我也希望测试docstrings中的代码示例。~/pckg/__init__.py
为空。在
~/pckg/py3仅.py公司名称:
^{pr2}$~/pckg/测试/测试-py3仅.py公司名称:
import sys, unittest
def setup_module():
if sys.version_info[0] < 3:
raise unittest.SkipTest("py3only unavailable on python "+sys.version)
class TestFancyFunc(unittest.TestCase):
def test_bruteforce(self):
from pckg.py3only import fancy_py3_func
for k in range(10):
self.assertEqual(fancy_py3_func(k),2*k)
在python3上测试时,所有的东西都经过测试并通过(从封闭的文件夹运行,例如~
):
~ nosetests3 -v --with-doctest pckg
Doctest: pckg.py3only.fancy_py3_func ... ok
test_bruteforce (test_py3only.TestFancyFunc) ... ok
在Python2上,~/pckg/tests/test_py2only.py
的模块fixture正确地检测到这种情况并跳过测试。但是,我们从~/pckg/py3only.py
得到一个SyntaxError
:
~ nosetests -v --with-doctest pckg
Failure: SyntaxError (invalid syntax (py3only.py, line 1)) ... ERROR
SKIP: py3only unavailable on python 2.7.6 (default, Mar 22 2014, 22:59:56)
一个类似于~/pckg/tests/test_py3only.py:setup_module()
的函数可以解决这个问题,如果我可以让nose
在doctest插件尝试导入该模块之前运行该代码。在
看起来我最好的办法是编写一个适当的顶级测试脚本来处理测试集合。。。在
可以使用nose-excludenose插件排除特定的测试文件、目录、类或方法。它有
exclude-*
选项。在要处理丢失的模块,必须使用
mock
来修补sys.modules
。在例如,在},后者是python3特有的。这两个模块import }不应该在python2下测试。如何在纯文本文件的模块外对它们进行doctest?我想这是OP的情况。在
mycalc
模块中有一个Calc
类,但我无法访问它,因为它丢失了。还有两个模块,mysuper_calc
和{mycalc
和{计算/mysuper_calc3.py
计算/mysuper_计算py在
^{pr2}$现在来模拟一下
mycalc
模块
mycalc
具有类Calc
,该类具有方法add
。我用2+3
测试SuperCalc
实例add
方法。在现在补丁
sys.modules
和mysuper_calc3
可以在with
块中有条件地导入。在计算/医生测试/我的超级计算_doctest.txt文档在
文件}。在
mysuper_calc_doctest.txt
必须单独在其自己的目录中,否则nosetests
将在非测试模块中搜索{医生:mysuper\u calc_doctest.txt文档... 好的
在0.038s内运行1次测试
好的
一个
nosetests
的包装器,用于检测python3,它将.py文件无语法错误地传递给nosetests
在我的鼻子测试.py在
鼻子有以下选项:
也许你可以将设备隔离到一个单独的文件中?在
相关问题 更多 >
编程相关推荐