Tôi là một chút mới cho mô-đun Devel :: Cover, nhưng đã tìm thấy nó rất hữu ích trong việc đảm bảo rằng tôi không thiếu kiểm tra.Làm cách nào tôi có thể nhận được phạm vi kiểm tra 100% trong mô-đun Perl sử dụng DBI?
Sự cố mà tôi đang gặp phải là hiểu báo cáo từ Devel :: Cover. Tôi đã xem tài liệu, nhưng không thể tìm ra những gì tôi cần để kiểm tra để có được mức độ phù hợp 100%.
Sửa - Tôi nên làm cho nó rõ ràng rằng tôi không nói rằng tôi cần% bảo hiểm 100, bởi vì như nhiều người chỉ ra, 100% bảo hiểm là một thuật ngữ lỏng lẻo, không không có nghĩa là mã của tôi là lỗi miễn phí và có thể không hoàn toàn là cần thiết. Vì tôi mới ở số Devel :: Cover, tôi muốn biết lý do tại sao mã của tôi không phải là 100% bảo hiểm, trong trường hợp tôi thiếu một số kiểm tra quan trọng .
Đây là kết quả từ báo cáo bìa:
line err stmt bran cond sub pod time code
...
36 sub connect_database {
37 3 3 1 1126 my $self = shift;
38 3 100 24 if (!$self->{dsn}) {
39 1 7 croak 'dsn not supplied - cannot connect';
40 }
41 *** 2 33 21 $self->{dbh} = DBI->connect($self->{dsn}, q{}, q{})
42 || croak "$DBI::errstr";
43 1 11 return $self;
44 }
...
line err % l !l&&r !l&&!r expr
----- --- ------ ------ ------ ------ ----
41 *** 33 1 0 0 'DBI'->connect($$self{'dsn'}, '', '') || croak("$DBI::errstr")
Và đây là và ví dụ về mã của tôi mà kiểm tra dòng cụ thể này:
my $database = MyModule::Database->new({ dsn => 'Invalid DSN' });
throws_ok(sub { $database->connect_database() },
qr/Can't connect to data source/,
'Test connection exception (invalid dsn)');
thử nghiệm này đi - các kết nối không ném một lỗi và hoàn thành bài kiểm tra "throws_ok" của tôi.
Tôi có một số bài kiểm tra để kết nối thành công, đó là lý do tại sao tôi nghĩ rằng tôi có mức độ phù hợp 33%, nhưng nếu tôi đọc chính xác, hãy nghĩ rằng tôi không thử nghiệm phần "|| croak" tuyên bố. Tôi nghĩ rằng tôi đã, với thử nghiệm "throws_ok", nhưng rõ ràng là tôi đang thiếu một cái gì đó.
Có ai có lời khuyên về cách tôi có thể kiểm tra DBI-> đường kết nối của mình thành công không?
Cảm ơn!
Edit:
brian tipped tôi tắt báo cáo HTML và bảng chân lý giải thích tại sao dòng # 41 không đi qua. Vấn đề duy nhất là tôi không thể hiểu được nó đang nói gì với tôi. Tôi đoán cốt lõi thực sự của câu hỏi của tôi là tại sao dòng này cụ thể không vượt qua phạm vi bảo hiểm.
Dưới đây là bảng sự thật:
LINE # % # coverage # condition
41 # 33 # A | B | deC# 'DBI'->connect($$self{'dsn'}, '', '') || croak("$DBI::errstr")
# # 0 | 0 | 0 #
# # 0 | 1 | 1 #
# # 1 | X | 1 # (THIS LINE IS Green - the rest are red)
Nếu bất cứ ai có thể giúp giải thích bảng sự thật này, tôi muốn đánh giá cao nó. Nó cũng đã được đề cập rằng để vượt qua phạm vi bảo hiểm tôi cần phải có một đối tượng cơ sở dữ liệu giả, nhưng tôi không hoàn toàn thấy làm thế nào bất cứ điều gì trong các kết quả bảo hiểm mà sẽ dẫn tôi vào điều này.
Cảm ơn bạn lần nữa!
Cố gắng để có được bảo hiểm đầy đủ điều kiện có lẽ là lãng phí nỗ lực. Bảo hiểm chi nhánh phải là quá đủ. Nếu mã của bạn là rất quan trọng mà bạn cần bảo hiểm điều kiện bạn không nên viết nó trong Perl. Là một lợi ích phụ, Devel :: Cover chạy nhanh hơn nhiều khi bạn không thu thập dữ liệu phủ sóng của điều kiện. –
"Phạm vi phủ sóng 100%" vẫn vô nghĩa nếu bạn không đủ điều kiện bạn đang bảo hiểm như thế nào. Bảo hiểm dòng? Bảo hiểm chi nhánh? Bảo hiểm đường dẫn? Mỗi cấp độ có độ tin cậy và độ khó thực hiện khác nhau. Thậm chí sau đó, bạn đang xem xét hoàn vốn cho thời gian đầu tư. Đây có phải là một hệ thống an toàn quan trọng có thể giết người không? Trong trường hợp đó, phạm vi phủ sóng 100% thậm chí sẽ không đủ: bạn sẽ cần kiểm tra hệ thống kỹ lưỡng cũng như bởi các kỹ sư kiểm tra được đào tạo. Nó có liên quan đến các hệ thống tài chính không? Trong trường hợp đó, bạn chắc chắn nên làm một kiểm toán an ninh quá. bất kỳ% bảo hiểm nào không bằng "hoàn thành". –
@Robert P - Tôi không cố gắng bảo hiểm 100% - Tôi đang cố gắng tìm hiểu xem tôi có thiếu kiểm tra trên kết nối DBI-> của mình hay không. Kể từ khi tôi mới đến Devel :: Cover, tôi nghĩ rằng nó là tốt để biết tại sao mã của tôi không được bảo hiểm 100%. Tôi đã đọc cả hai blog mà bdfoy liên kết bên dưới và biết rằng tôi không cần bảo hiểm 100%. Cũng giống như Perl :: Phê bình - đi qua nhà phê bình mà không có bất kỳ cảnh báo nào là không đủ. – BrianH