2012-08-29 22 views
27

Tôi hiện đang cố gắng sử dụng thư viện giả để viết một số unittests mũi cơ bản trong python.Làm thế nào để loại bỏ gói giả từ báo cáo vùng phủ python bằng cách sử dụng nosetests

Sau khi hoàn thành một số ví dụ cơ bản, bây giờ tôi đã cố gắng sử dụng nosetests --with-coverage và bây giờ tôi có gói mô hình và gói tôi đã cố gắng 'bỏ qua' được hiển thị trong báo cáo phủ sóng. Có khả năng loại trừ chúng không?

Đây là lớp Tôi muốn thử nghiệm:

from imaplib import IMAP4 

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

Và testcase: từ vá mock nhập khẩu

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") 

bây giờ tôi nhận được đầu ra sau cho 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] 

Có cách nào để loại trừ gói giả và imaplib gói mà không phải bằng tay danh sách trắng tất cả ngoại trừ những gói bởi --cover-package=PACKAGE

Nhờ Ned Batchelder bây giờ tôi biết về các tập tin .coveragerc, cảm ơn vì điều đó!

Tôi tạo ra một tập tin .coveragerc với nội dung sau:

[report] 
omit = *mock* 

Bây giờ đầu ra của tôi cho mock trong báo cáo bảo hiểm là:

mock      1240 1240  0% 16-2356 

Nó không bao gồm các gói giả nữa nhưng vẫn hiển thị nó trong báo cáo.

Tôi sử dụng Coverage.py, phiên bản 3.5.2 nếu đây là bất kỳ trợ giúp nào.

+0

Cố gắng xóa dữ liệu trước đó bằng '--cover-erase'. – xbello

Trả lời

30

Tạo một file .coveragerc loại trừ những gì bạn không muốn trong báo cáo: http://nedbatchelder.com/code/coverage/config.html

+0

bạn đã cho tôi một bước gần hơn, cảm ơn vì điều đó. –

+0

Bạn có thể xem thông tin tôi đã thêm vào câu hỏi của mình không? Tôi không chắc liệu đó có phải là lỗi của tôi hay không, nếu bỏ qua trong khối [báo cáo] không hoạt động chính xác. –

+3

Tôi đang đối mặt với một vấn đề tương tự, và tạo ra một tập tin 'coveragerc' chứa các tạp chất và thiếu sót. Tuy nhiên, mũi dường như không xem xét nó và tiến hành chạy vùng phủ sóng trên tất cả các thư viện của Python (mặc dù 'cover_pylib' được đặt thành' False' trong tệp cấu hình). Bất kỳ ý tưởng làm thế nào để làm cho coveragerc làm việc với mũi? – Boris

14

Trong .coveragerc của bạn di chuyển omit nhập của bạn từ [report] phần đến phần [run].

+0

Chính xác. '[report]' ngăn chặn báo cáo mỗi tệp nhưng không thay đổi các phép tính%. '[run]' hoạt động cho tôi. – cdunn2001

1

Tôi đã có một tình huống tương tự kiểm tra một loạt các gói phụ trong thư mục gói chính của tôi. Tôi đã chạy nosetests từ trong thư mục trên cùng của mô-đun của tôi và Mock và các thư viện khác đã được đưa vào báo cáo bảo hiểm. Tôi đã thử sử dụng --cover-module my_package trong nosetests, nhưng sau đó các gói con không được bao gồm.

Chạy sau đây giải quyết vấn đề của tôi:

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

Vì vậy, nếu tất cả các mã mà bạn muốn kiểm tra là trong cùng thư mục, sau đó bạn có thể nhận bảo hiểm cho nó một mình bằng cách xác định đường dẫn mô-đun đến nosetests. Điều này tránh sự cần thiết phải đưa mỗi danh sách trắng vào danh sách trắng riêng lẻ.

(Python 2.7.6, vùng phủ sóng 4.0.3, mũi 1.3.7)

Các vấn đề liên quan