ant*_*ony 8 python pytest python-3.x
我编写了一个与Python2和Python3一起运行的包(http://github.com/anntzer/parsedcmd).但是,我不得不写Python2和Python3分开(py.test)单元测试(主要是因为我想测试Python3额外的功能,特别是仅关键字参数),所以我有一个test_py2.py和test_py3.py一个test子包.现在,如果我跑,比方说py.test2 mypkg,test_py2传球,但test_py3失败了SyntaxError.同样地,对于py.test3 mypkg,test_py3传递但test_py2失败(我可以使这个工作,但这只是一个StringIO移动的问题io).
我可以设计test子包,以便import mypkg.test只导入正确版本的测试,但显然py.test并不关心 - 它只是看到两个文件匹配test_*并抓取它们中的所有测试,忽略了__init__.py告诉他导入的内容.
所以现在我需要做的两py.test2 mypkg/test/test_py2.py和py.test3 mypkg/test/test_py3.py.有没有一种方法来建立整个事情让py.test2 mypkg和py.test3 mypkg会"只是工作"?
谢谢.
如果您可以在所有解释器上导入模块,并且适当地跳过测试是一种常见的解决方案.否则,您可以将以下内容作为"conftest.py"放入测试目录中:
import sys
py3 = sys.version_info[0] >= 3
class DummyCollector(pytest.collect.File):
def collect(self):
return []
def pytest_pycollect_makemodule(path, parent):
bn = path.basename
if "py3" in bn and not py3 or ("py2" in bn and py3):
return DummyCollector(path, parent=parent)
Run Code Online (Sandbox Code Playgroud)
这将获取一个项目特定的插件,并将正确忽略一个测试模块,其中包含错误解释器版本上包含"py2"或"py3"子字符串的文件名.当然你可以改进它,而不是直接在conftest.py文件中有一个显式列表,而不是检查文件名等.pp.
HTH,holger
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |