Я немного новичок в модуле Devel :: Cover, но нашел его очень полезным, чтобы убедиться, что я не пропускаю тесты.
Проблема, с которой я сталкиваюсь - это понимание отчета от Devel :: Cover. Я посмотрел документацию, но не могу понять, что мне нужно проверить, чтобы получить 100% покрытие.
Редактировать - Я должен дать понять, что я не говорю, что мне нужно 100% покрытие,
потому что, как указывают несколько человек,
100% покрытие это свободный срок, делает
не означает, что мой код не содержит ошибок, и
не всегда может быть полностью
необходимо. Так как я новичок в
Devel :: Обложка, мне интересно знать
почему мой код не покрывает 100%, в случае, если я пропускаю некоторые важные
тесты.
Вот вывод из отчета с обложки:
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")
А вот и пример моего кода, который тестирует эту конкретную строку:
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)' );
Этот тест пройден - соединение вызывает ошибку и выполняет мой тест throws_ok.
У меня есть несколько тестов, которые проверяют успешное соединение, поэтому я думаю, что у меня 33% покрытия, но если я правильно его читаю, Cover считает, что я не тестирую часть "|| croak" заявление. Я думал, что с тестом throws_ok, но, очевидно, я что-то упустил.
У кого-нибудь есть советы, как я могу успешно проверить мой DBI-> соединительный провод?
Спасибо!
Edit:
Брайан сообщил мне об отчете в формате HTML и таблице истинности, которая объясняет, почему строка № 41 не проходит. Единственная проблема в том, что я не могу понять, что это говорит мне. Я предполагаю, что реальная суть моего вопроса заключается в том, почему эта конкретная линия не проходит покрытие.
Вот таблица истинности:
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)
Если бы кто-нибудь мог помочь объяснить эту таблицу истинности, я был бы признателен. Также было упомянуто, что для прохождения покрытия мне нужен фиктивный объект базы данных, но я не совсем понимаю, как что-то в покрытии приводит к тому, что я могу это понять.
Еще раз спасибо!