[英]Python coverage.py exclude_lines
我有幾個Django項目,我使用coverage.py並且一直在嘗試向我的.coveragerc配置文件的exclude_lines部分添加一些額外的表達式。 問題是,即使正確的正則表達式在http://www.pythonregex.com或http://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.