一个py.test插件,用于自定义doctest结果的字符串表示。

pytest-doctest-custom的Python项目详细描述


DevelopmentTravis CI buildsCoveralls coverage report (pytest>=2.8.0)
Last releaseLast stable version (PyPI)Python versions (PyPI)Python implementations (PyPI)
PyPI statusDownloads (PyPI)Distribution format (PyPI)Project status (PyPI)License (PyPI)

在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_widthmax_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

要自定义其参数,如widthindent,可以将 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Date作为MyBatis中Oracle SELECT查询的参数[not get Response]   来自两个独立线程的并行java访问队列   如果数据已经存在,java Android Studio SQLite不会将数据插入数据库   mysql java spring项目仅在第一次运行时显示错误,再次运行后运行正常。为什么呢?   java SQL错误:1364,SQLState:HY000字段“rating_id”没有默认值/保存具有onetoone关系的子实体时   Tomcat中无cookie的java支持会话#重复   JAVAlang.RuntimeException:Android Studio   java CheckboxMultipleChice存储在SQL中   Kafka Java SimpleConsumer奇怪的编码   使用Hibernate保存servlet中处理的数据时遇到java错误   JavaSpring在运行时添加数据源   java使用一个类中另一个类的方法   java空值随Spring Rest资源更新   java Spring引导:为什么要使用OncePerRequestFilter?   java Android异步任务重用   java JTextField未按预期填充列?