2017-02-04 42 views
1

有沒有什麼辦法在測試覆蓋期間排除私有方法?排除掩蓋的私有方法

在我.coveragerc我想:

[report] 
exclude_lines = 
    __* 

但似乎排除方法,如long_method_name

療法是任何方式做到這一點沒有列出所有methdos?

編輯

我想的方法,如__add__具有呈三角語法私人是在測試中包含

回答

3

docs

class MyObject(object): 
    def __init__(self): 
     blah1() 
     blah2() 

    def __repr__(self): # pragma: no cover 
     return "<MyObject>" 

排除一個配置選項無厘頭IMO所有的私有方法 - 這會導致錯誤的假設,如果一個看上去就覆蓋效果。

+0

我們需要測試只公開API而不是私有方法,我們得到了像albot 100或更多,因此無處不在''#pragma'不是一種選擇。有沒有這樣做的黑客? – MaLiN2223

+0

您可以將您的API調用重新設計爲從另一個文件中的某些內容繼承,將私有方法放入這些對象中,並忽略您現在導入的文件。 – ti7

1

您的正則表達式爲__*,它匹配一個或多個下劃線,因此它將排除任何具有任何下劃線的行。這不是你想要的。

這應該排除那些與雙下劃線開頭的函數中的任何函數定義:

[report] 
exclude_lines = 
    def __ 

這似乎是一個壞主意給我。你需要知道這些功能是否經過了適當的測試。它們是從你的公共API調用的:如果你不測量它們調用的函數的覆蓋範圍,你怎麼能聲稱你的公共API函數已經過全面測試?

要排除的私有方法,而不是特殊的方法,你可以嘗試一個更復雜的正則表達式:

[report] 
exclude_lines = 
    def __[^(]*[^_][(] 

但這是越來越那種瘋狂......

+0

這是非常接近answet我正在尋找,但def __也排除方法,如__add__或__init__(我將編輯我的問題,包括那些),我想測試。 推理排除私有方法是,我有很多GUI(pygame)模塊,我不想單元測試 - 我有GUI測試它。我得到了多個配置文件,其中一個我只需要測試公共方法:) – MaLiN2223

+0

[「我不會單元測試私有方法。私有方法是應該隱藏給類的用戶的實現細節。方法打破封裝。「](https://stackoverflow.com/a/105021/125507) – endolith