一个py.test插件,用于自定义doctest结果的字符串表示。
pytest-doctest-custom的Python项目详细描述
Development | |
---|---|
Last release | |
PyPI status |
在cpython 2.6+/3.2+、pypypy(2、4和5)、pypy3(2和5)、pypy stm上测试 2.5.1和Jython 2.7.0,使用py.test 2.1+(CI服务为2.8.5+;2.2.4+ 为了Jython)。
它是做什么的?
更改doctest用于呈现对象表示的显示挂钩。
对于具有doctests的给定代码,可以运行:
py.test --doctest-modules --doctest-repr=IPython.lib.pretty:pretty
它将像往常一样运行doctest示例,但不会打印结果 通过直接调用__repr__方法,但是通过调用给定的函数 将结果值作为其单个参数。
要做到这一点,它只需要一个表示格式,该格式在给定 对象,返回一个字符串及其表示形式。它应该作为 --doctest-repr命令行选项地址为module:object,其中 嵌套模块/对象的点。对于像ascii函数这样的内置函数, 您可以删除module:前缀。
也可以使用始终返回None但 将结果写入某个流/文件。在这种情况下你应该用这个 包装stdout_proxy:
# mymodule.pyfrompytest_doctest_customimportstdout_proxyfrompprintimportPrettyPrinterpp=PrettyPrinter(width=72,stream=stdout_proxy).pprint
所以您可以运行:
py.test --doctest-modules --doctest-repr=mymodule:pp
通用表示格式化程序/打印机
注意使用默认的“打印机”,您应该始终使用格式 方法/功能,而不是打印方法/功能,通常作为打印机对象 在初始化时将自己分配给sys.stdout,并分配给doctest运行程序 通过短时间模拟这种流来收集打印数据。这个包裹暂时 在找到地址时更改sys输出/错误流 可调用,但如果模块已导入,则这还不够。 (比如conftest.py)。如果可能,请使用可调用的表示格式设置程序 或者明确打印机的输出流是可调用的(它应该是 pytest_doctest_custom.stdout_proxy)。
- ipython“pretty”模块(对于输出,不带“out[]:”前缀)
要使用这个,需要在测试中安装ipython 环境(例如,在tox deps列表中包含ipython)。可能的 在项目上运行toctests的tox.ini文件是:
[tox]envlist=py{35,34,27}[testenv]deps=ipythoncommands=py.test {posargs}[pytest]addopts=--doctest-modules --doctest-glob=test_*.rst --doctest-repr=IPython.lib.pretty:pretty --ignore setup.py
您可以自定义其参数,如max_width和 max_seq_length根据需要创建自定义函数,例如 将其添加到conftest.py模块并调用py.test --doctest-repr=conftest:doctest_pretty:
# conftest.pyfromIPython.lib.prettyimportprettydefdoctest_pretty(value):returnpretty(value,max_width=72)
这台漂亮的打印机(按键)对集合、冻结集合和听写进行排序,并换行 具有固定缩进,并且具有一致的套/冻结套打印结果 在Python2和3上进行测试(cpython 2.7和3.3+)。但不是Python 标准库,这样的打印机需要ipython作为运行的要求 测试,有更多的东西,不仅仅是漂亮的打印机。 在cpython 2.6/3.2中,您需要确保ipython版本兼容 (例如,在tox.ini中使用deps = ipython<2)。
在pypy中,表示打印机将任何dict显示为dictproxy(使用 ipython 5.0.0,pypy 5.3.1),因为它们都是一样的,还有dict打印机 被替换,因此需要进行黑客攻击以确保 cpython和pypy。您可以用同样的方法创建一个pytest_configurehook conftest.py到monkeypatch到types.DictProxyTypea dict 类似type("dictproxy",(dict,), {})的派生程序重新加载 IPython.lib.pretty模块之后,或者重新生成 IPython.lib.prettydict表示打印机 _dict_pprinter_factory("{","}", dict)到它的_type_pprinters[dict]。 pypy3也是如此,它的v2.4.0是python 3.2,因此 需要ipython<2。
ipython与jython不兼容。
- python“pprint”模块(标准库)
可以直接使用pprint.pformat函数 --doctest-repr=ppretty:pformat。你不应该直接使用pprint 来自pprint.PrettyPrinter对象的方法,除非流正确 设置为stdout_proxy。
要自定义其参数,如width和indent,可以将 PrettyPrinter代码中的对象,例如:
# conftest.pyimportpprintdoctest_pp=pprint.PrettyPrinter(width=72)
使用^{tt35}的pformat属性运行py.test$ 实例,用--doctest-repr=conftest:doctest_pp.pformatsha给出会的 够了。
标准库漂亮的打印机(按键)对dict进行排序,用 自定义缩进大小,但有几个容器的结果取决于 python版本(例如,在python 2.6和3中,空集为"set()",但为 ^ python 2.7中的{tt40}$,python 3中的单个项设置为{item},但是 set([item])在python 2中)。另一方面,这是一个python标准 库,对测试没有额外的要求,并且在pypy/pypy3和 Jython就像在CPython一样。
安装
您可以使用pip:
pip install pytest-doctest-custom
或直接设置.py:
python setup.py install
版权所有(c)2016 Danilo de Jesus da Silva Bellini