簡體   English   中英

Python coverage.py exclude_lines

[英]Python coverage.py exclude_lines

背景

我有幾個Django項目,我使用coverage.py並且一直在嘗試向我的.coveragerc配置文件的exclude_lines部分添加一些額外的表達式。 問題是,即使正確的正則表達式在http://www.pythonregex.comhttp://www.regexr.com等測試器中拾取線路,也不會導致行被忽略。那個報告。

我已經查看了文檔並在存儲庫周圍進行了調查,但未能找到任何理由來解釋為什么我的配置可能無法正常工作。 從它出現的文檔中我得到的配置完全符合它們的描述。

我還嘗試使用django-nose 1.2版本,這是最后一個PyPI版本,它允許異常注入,但無濟於事,它似乎有一些問題,至少要弄清楚Django視圖和Django REST Framework API端點的覆蓋范圍在1.7版本中。

我試過的

我的配置如下:

[run]
branch = True
omit =
    */tests*
    */migrations/*
    *__init__.py*
    */settings/*
    *wsgi.py*
    *admin.py*

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    pragma: no cover
    def __repr__
    if self.debug:
    raise AssertionError
    raise NotImplementedError
    (.*)except Exception as e:(.*)
    if 0:
    if __name__ == .__main__.:

我還在配置的報告部分中嘗試了以下組合的異常處理:

(.*)except Exception as e:
except Exception as e:
except Exception as e:(.*)

下面是我希望忽略的代碼部分的函數示例:

def my_func():
    try:
        # Some logic
        return True
    except Exception as e:
        return defensive_exception(my_func.__name__, e, False)

在上面的例子中,基於文檔,我希望except Exception as e:所有內容都被忽略,或者至少將except Exception as e行本身。 然而,情況似乎並非如此。 如果有人對我的配置有什么問題有所了解,或者我需要做些什么,我會非常感謝幫助。

您不需要匹配整條線,因此最后不需要點星。 這應該工作:

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    pragma: no cover
    def __repr__
    if self.debug:
    raise AssertionError
    raise NotImplementedError
    except Exception as e:

意味着 :這種編碼風格對我很有幫助 你正在做的追趕毯子例外是糟糕的風格,可以隱藏問題。 那你似乎不在乎代碼是否經過測試!

如果你需要在像這樣的大量函數上執行強大的異常處理,也許你想編寫一個函數裝飾器來包裝函數調用。 這將減少代碼行數,並集中您的邏輯。 然后,您也可以在一個地方處理覆蓋問題。

我一直在做的是使用pragma: no cover你在exclude_lines已有的pragma: no cover

def my_func():
    try:
        # Some logic
        return True
    except Exception as e:  # pragma: no cover
        return defensive_exception(my_func.__name__, e, False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM