python / python/cpython

Consider adding `doctest.skip_if` decorator

未關閉
#117,364 4 則留言 1 個 reaction 已指派 1 人 在 GitHub 檢視

@sobolevn 已經在處理了。

開始於 2024年3月29日。

3.13 stdlib type-feature
主要語言
Python
星號
77.2k
分支
35.9k
PR 合併指標
PR 指標待擷取

描述

Feature or enhancement

Right now there's no way to skip the whole test / class doctest. You can only skip individual statements with # doctest: +SKIP

This causes problems in several use-cases:

  • You have a doctest that should be skipped based on the platform
  • We have doctests that should be skipped based on a resource availability
  • Libraries might want to skip some doctests based on the Python version / any other lib version

Right now we have this hack:

https://github.com/python/cpython/blob/2e9be80c99f635c2f7761e8356b0260922d6e7a6/Lib/test/test_doctest/test_doctest.py#L727-L730

https://github.com/python/cpython/blob/2e9be80c99f635c2f7761e8356b0260922d6e7a6/Lib/test/test_doctest/test_doctest.py#L1999-L2003

https://github.com/python/cpython/blob/2e9be80c99f635c2f7761e8356b0260922d6e7a6/Lib/test/test_doctest/test_doctest.py#L2938-L2943

However, this is just test functions. For library functions it would be much harder to do.
You have to jiggle __doc__ attribute around.

Since https://github.com/python/cpython/pull/117297 we now have correct skipped count for doctest + unittest integration.

So, I propose adding this decorator to doctest.py

def skip_if(condition):
    def decorator(func):
        if condition and HAVE_DOCSTRINGS:
            func.__doc__ = ">>> pass  # doctest: +SKIP"
        return func
    return decorator

It will allow us skipping some tests conditionally with the proper reported results.

Refs https://github.com/python/cpython/pull/116758
CC @serhiy-storchaka and @furkanonder

Linked PRs
  • gh-122935

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。