2012-08-29 64 views
27

我目前嘗試使用模擬庫在python中編寫一些基本的nose unittests。如何使用nosetests從python覆蓋報告中排除模擬包

完成一些基本示例後,我現在嘗試使用nosetests --with-coverage,現在我有模擬軟件包,並且我試圖「模擬」的軟件包顯示在覆蓋率報告中。有沒有可能排除這些?

這裏是我想測試類:

from imaplib import IMAP4 

class ImapProxy: 
    def __init__(self, host): 
     self._client = IMAP4(host) 

而且測試用例: 從模擬進口貼片

from ImapProxy import ImapProxy 

class TestImap: 
    def test_connect(self): 
     with patch('ImapProxy.IMAP4') as imapMock: 
      proxy = ImapProxy("testhost") 
      imapMock.assert_called_once_with("testhost") 

我現在得到以下輸出nosetests --with-coverage

. 
Name   Stmts Miss Cover Missing 
------------------------------------------ 
ImapProxy  4  0 100% 
imaplib  675 675  0% 23-1519 
mock   1240 810 35% [ a lot of lines] 

有什麼辦法可以排除模擬包和通過--cover-package=PACKAGE

得益於斯內德爾德imaplib包,而無需手動白名單,但所有這些軟件包我現在瞭解的.coveragerc文件,感謝您的!

我創建了包含以下內容的.coveragerc文件:

[report] 
omit = *mock* 

現在我在覆蓋報告模擬輸出:

mock      1240 1240  0% 16-2356 

它不包括模擬包中的任何時間較長,但仍然在報告中顯示。

我使用Coverage.py,版本3.5.2,如果這是任何幫助。

+0

嘗試用'--cover-erase'清除以前的數據。 – xbello

回答

30

創建.coveragerc文件排除你不想在報告中的內容:http://nedbatchelder.com/code/coverage/config.html

+0

你讓我更靠近一步,謝謝你。 –

+0

您可以查看我在問題中添加的信息嗎?我不確定這是否是我的錯誤,或者[報告]塊中的省略是否無法正常工作。 –

+3

我正面臨類似的問題,並創建了一個包含內容和遺漏的'coveragerc'文件。然而,鼻子似乎沒有考慮它,並繼續在所有Python庫上運行覆蓋(儘管在配置文件中將cover_pylib設置爲False)。任何想法如何使共同作用與鼻子? – Boris

14

在你.coveragerc移動從[report]部分的[run]節你omit項。

+0

沒錯。 '[報告]'抑制每個文件的報告,但不會改變%計算。 '[run]'適合我。 – cdunn2001

1

我有類似的情況測試我的主包目錄中的一系列子包。我從我的模塊的頂層目錄中運行nosetests,並且其他庫也包含在覆蓋報告中。我嘗試在測試中使用--cover-module my_package,但不包括子包裝。

運行下面的解決我的問題:

nosetests --with-coverage --cover-erase --cover-package ../my_package 

所以,如果所有你要測試的代碼是在同一目錄下,然後您可以通過指定獲得覆蓋管它模塊路徑爲nosetests。這避免了需要單獨列出每個子模塊的白名單。

(Python 2.7.6,覆蓋率4.0.3,鼻子1.3.7)

相關問題