Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 2
1

Не получается написать тест для проверки программы

01.07.2013, 07:23. Показов 1626. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Perl мой первый язык программирования и я совсем недавно начал его изучать, пока все более или менее получалось по крайней мере до того момента пока не решил научиться писать тесты к своим программкам и тут я сломал себе мозг)) Суть проблемы такова, что знания английского у меня очень поверхностные на cpan.org прочитал про тесты Simple, More и Differences + книжку(пособие) Perl Testing: A Developer's Notebook естественно многое осталось непонятным, а всё что я нашел в сети по этому поводу на русском очень скудно, такое ощущение что либо единицы пишут тесты, либо это такая банальщина что и говорить стытдно))

Вобщем у меня получилось протестировать свои программки будь то массивы, скаляры и функции если я в них не объявляю переменные через 'my' ,а вот если объявляю то они мне либо 'undef' выдают либо пустоту как пример:
tested.pl
Perl
1
2
3
use Modern::Perl;
my @domains = qw(kimkiduk@mail.ru [email]figli@nagli.com[/email]);
my $znachenie = 4;
phrase.t
Perl
1
2
3
4
5
6
   use Test::More tests => 5;
    use Test::Differences;
 
ok( require( 'tested.pl' ), 'loaded file okay' ) or exit; # тут все ок
eq_or_diff \@domains , "ggff" , "testerion"; # тут просто [] выдает 
eq_or_diff $znachenie , "ggff" , "testerion"; # а тут undef
Суть вопросов такова:
1)-я не до конца понял как передавать для проверки какое либо значение и сравнить с тем что будет после отработки этой функции как пример в программке есть такая функция:
Perl
1
2
3
4
5
sub check {
    my @check_domains = 
    sort grep s/^[a--я0-9\-\.]+@/\n/i,
    grep /^[^\-\@][a-zа-я0-9\-\.]+@[a-zа-я0-9]+\.[a-zа-я]{2,4}/i , @_;
}
а вот как правильно передать ей какое либо значение, а потом проверить с тем что должно получиться пока не понял, точнее у меня получилось переделать пример как в книжке Perl Testing: A Developer's Notebook 2я глава (Skipping Tests) но там пример идет через package, а как без него передать я не понял точнее у меня чисто случайно получилось но потом обломалось(
2) - если не затруднит в кратце объяснить в чем разница или для чего используются в test::more (is, isnt, like, unlike, cmp_ok, is_deeply, new_ok и subtest) или может кто знает где про это написано на русском, а в идеале с примерами))
Заранее благодарю за любую подсказку и объяснения
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2013, 07:23
Ответы с готовыми решениями:

Написать программу-тест для проверки знаний таблицы умножения
Написать программу-тест для проверки знаний таблицы умножения. Программа должна вывести 10 примеров...

Как написать тест для программы?
Суть программы заключается в создании последовательности строк.Каждая строка состоит из слов...

Тест для проверки знаний студентов
Добрый день. помогите создать тест (или если есть что нибудь готовое похожее) для практической...

Создать тест для проверки знаний по математике
За любую помощь и информацию о решении подобного рода заданий буду очень благодарна Нарушаете...

3
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
01.07.2013, 14:44 2
На скорую руку написал пример.
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!perl
 
use strict;
use Test::More tests => 7;
use Test::Differences;
 
my @domains = ('kimkiduk@mail.ru', '[email]figli@nagli.com[/email]');
my @domains_second = ('kimkiduk@mail.ru', '[email]figli@nagli.com[/email]');
my $znachenie = 4;
my $znachenie2 = 8;
 
ok($znachenie == 5, "\$znachenie ravno 5"); # проверяем значение переменной
ok($znachenie == 4, "\$znachenie ravno 4"); # проверяем значение переменной
eq_or_diff \@domains , "ggff" , "testerion \@domains"; # проверяем содержимое массива
eq_or_diff \@domains , \@domains_second , "testerion \@domains"; # проверяем содержимое массива
eq_or_diff $znachenie , "ggff" , "testerion \$znachenie"; # проверяем значение переменной
is(umnogenie(5,9), $znachenie*$znachenie2, "test funkcii"); # проверяем работу функции
is(umnogenie($znachenie,$znachenie2), $znachenie*$znachenie2, "test funkcii"); # проверяем работу функции
 
sub umnogenie {
    my ($x, $y) = @_;
    return $x*$y;
    }
Вывод примера такой
Код
1..7
not ok 1 - $znachenie ravno 5
#   Failed test '$znachenie ravno 5'
#   at testmore.pl line 12.
ok 2 - $znachenie ravno 4
not ok 3 - testerion @domains
#   Failed test 'testerion @domains'
#   at testmore.pl line 14.
# +----+----------------------------------+----+----------+
# | Elt|Got                               | Elt|Expected  |
# +----+----------------------------------+----+----------+
# *   0|'kimkiduk@mail.ru'                *   0|'ggff'    *
# *   1|'[email]figli@nagli.com[/email]'  *    |          |
# +----+----------------------------------+----+----------+
ok 4 - testerion @domains
not ok 5 - testerion $znachenie
#   Failed test 'testerion $znachenie'
#   at testmore.pl line 16.
# +---+-----+----------+
# | Ln|Got  |Expected  |
# +---+-----+----------+
# *  1|4    |'ggff'    *
# +---+-----+----------+
not ok 6 - test funkcii
#   Failed test 'test funkcii'
#   at testmore.pl line 17.
#          got: '45'
#     expected: '32'
ok 7 - test funkcii
# Looks like you failed 4 tests of 7.
Документацию по Test::More смотрел здесь, туториал здесь (на английском, но много примеров и понятно). Удачи.
1
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 2
01.07.2013, 18:19  [ТС] 3
pka, Спасибо огромное за подсказку по твоему примеру получилось передавать значения в функцию и получать в обратку то что нужно, теперь вопрос с функциями закрыт, но вот с обычными переменными вопрос остался, ведь в твоем примере значения переменных прописаны в тесте, а если я хочу проверить те значения что сохранены в переменных в программке они возвращаются 'undef' если объявлены в 'my', а без 'my' всё ок, вот и вопрос как их проверить при 'my' если это возможно?
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
01.07.2013, 22:05 4
Давайте разберёмся с undef. Вот набросал второй пример
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!perl
 
use strict;
use Test::More tests => 10;
use Test::Differences;
 
my($znachenie); # переменная объявлена, но она undef
 
ok($znachenie == 5, "\$znachenie ravno 5"); # проверяем значение переменной
ok($znachenie eq '5', "\$znachenie eq \'5\'"); # проверяем значение переменной
ok(defined($znachenie), "\$znachenie defined"); # проверяем значение переменной
 
eq_or_diff $znachenie , 5 , "testerion \$znachenie 5"; # проверяем значение переменной
eq_or_diff $znachenie , undef , "testerion \$znachenie undef"; # проверяем значение переменной
 
$znachenie = 5; # переменная равна 5
 
ok($znachenie == 5, "\$znachenie ravno 5"); # проверяем значение переменной
ok($znachenie eq '5', "\$znachenie eq \'5\'"); # проверяем значение переменной
ok(defined($znachenie), "\$znachenie defined"); # проверяем значение переменной
 
eq_or_diff $znachenie , 5 , "testerion \$znachenie 5"; # проверяем значение переменной
eq_or_diff $znachenie , undef , "testerion \$znachenie undef"; # проверяем значение переменной
вывод примера такой
Код
1..10
Use of uninitialized value $znachenie in numeric eq (==) at testmore2.pl line 9.
not ok 1 - $znachenie ravno 5
#   Failed test '$znachenie ravno 5'
#   at testmore2.pl line 9.
Use of uninitialized value $znachenie in string eq at testmore2.pl line 10.
not ok 2 - $znachenie eq '5'
#   Failed test '$znachenie eq '5''
#   at testmore2.pl line 10.
not ok 3 - $znachenie defined
#   Failed test '$znachenie defined'
#   at testmore2.pl line 11.
not ok 4 - testerion $znachenie 5
#   Failed test 'testerion $znachenie 5'
#   at testmore2.pl line 13.
# +---+-------+----------+
# | Ln|Got    |Expected  |
# +---+-------+----------+
# *  1|undef  |5         *
# +---+-------+----------+
ok 5 - testerion $znachenie undef
ok 6 - $znachenie ravno 5
ok 7 - $znachenie eq '5'
ok 8 - $znachenie defined
ok 9 - testerion $znachenie 5
not ok 10 - testerion $znachenie undef
#   Failed test 'testerion $znachenie undef'
#   at testmore2.pl line 23.
# +---+-----+----------+
# | Ln|Got  |Expected  |
# +---+-----+----------+
# *  1|5    |undef     *
# +---+-----+----------+
# Looks like you failed 5 tests of 10.
Обратите внимание, при ok идёт ошибка на undef значения. При текстовом сравнении eq_or_diff ошибки не происходит. Определена переменная или нет, можно определить при помощи функции defined().
1
01.07.2013, 22:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2013, 22:05
Помогаю со студенческими работами здесь

Unit-тест для проверки текста в файле
Как сделать unit-тест для проверки метода, который создает текстовый файл и пишет в него что-то?...

[JUnit 4] Тест для проверки валидатора email
Особо нет опыта написания юнит тестов, поэтому хочу спросить. Написал такой метод для тестирования...

Разработать тест для проверки знаний по выбранной теме
Помогите написать программу, илишаблон для программы или подскажите как написать такую прогу на...

Программа тест для проверки знаний, может есть у кого?
Доброго времени суток! Может кто-нибудь поделиться программой для тестирования, в которой будут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru