Круто, буду юзать. Похоже сложные вещи, типа, не is_eq, а cmp_deeply из Test::Deep так заюзать нельзя?
30 июня 2016 г., 21:38 пользователь Гришаев Анатолий <[email protected]> написал: > Когда тест фейлится то печатает номер строки из которой был вызван is() > а если используешь $tb->is_eq, то печатается номер строки где была вызвана > test_case. > > в первом случае это одна строка на все тесты, а во втором на каждый тест > своя строка. > > Помогает, если ты не имеешь доступа к той тачке, где тесты > проходят(cpan-testers например) > В первом случае ты знаешь, что какой-то тест в файле сломался, а во втором > знаешь какой именно тест сломался, > даже если ты не дал для него имя или у двух тестов оно каким-то образом > получилось одинаковым (бывало, такова жизнь). > > > > > > > 30 июня 2016 г., 21:07 пользователь Victor Efimov <[email protected]> > написал: > >> а зачем, кстати, $tb ? >> >> 30 июня 2016 г., 20:59 пользователь Гришаев Анатолий >> <[email protected]> написал: >> > Спасибо Акжан и Виктор за ваши варианты. >> > >> > Вообщем использовал обе идеи и добавил, что-то от себя. >> > 1) использовал именованные параметры для ясности >> > 2) Завернул в функцию >> > 3) Используем номера строк для нахождения failing case >> > >> > Получилось в итоге. >> > ========================= >> > test_case( >> > input => "input 1", >> > output => "result 1", >> > ); >> > ... >> > test_case( >> > input => "input 2", >> > output => "result 2", >> > ); >> > >> > sub test_case{ >> > my $tb = Test::Builder->new; >> > ... >> > $tb->is_eq( ... ); >> > }; >> > ========================= >> > >> > >> > 30 июня 2016 г., 20:21 пользователь Гришаев Анатолий >> > <[email protected]> >> > написал: >> > >> >> Не совсем эквивалентно теряется информация о строке в которой определен >> >> тест >> >> >> >> Можно твой вариант улучшить чуть-чуть >> >> >> >> вместо >> >> ............. >> >> sub test_case { >> >> my ($want_result, $input) = @_; >> >> >> >> my $r = my_func($input) >> >> ok($r) >> >> is($r->string, $want_result, "parse $input") >> >> } >> >> .......................... >> >> >> >> Лучше писать >> >> //////////////////// >> >> >> >> sub test_case { >> >> my ($want_result, $input) = @_; >> >> +my $tb = Test::Builder->new; >> >> my $r = my_func($input) >> >> $tb->ok($r) >> >> -is($r->string, $want_result, "parse $input") >> >> +$tb->is_eq($r->string, $want_result, "parse $input"); >> >> } >> >> ///////////////////// >> >> >> >> Я от подобного варианта ушел, не смог заставить писать в таком стиле, >> >> из-за собственных требований к красоте. >> >> >> >> >> >> >> >> 30 июня 2016 г., 19:53 пользователь Victor Efimov <[email protected]> >> >> написал: >> >> >> >>> или >> >>> я переодически делаю вместо >> >>> === >> >>> my ($want_result, $input) = ( "вход 1", "выход 1") >> >>> >> >>> my $r = my_func($input) >> >>> ok($r) >> >>> is($r->string, $want_result, "parse $input") >> >>> === >> >>> >> >>> так: >> >>> >> >>> === >> >>> sub test_case { >> >>> my ($want_result, $input) = @_; >> >>> >> >>> my $r = my_func($input) >> >>> ok($r) >> >>> is($r->string, $want_result, "parse $input") >> >>> } >> >>> >> >>> test_case( "вход 1", "выход 1"); >> >>> test_case( "вход 2", "выход 2"); >> >>> test_case( "вход 3", "выход 3"); >> >>> test_case( "вход 4", "выход 4"); >> >>> === >> >>> >> >>> что-то в общем-то эквивалентно готовому хэшу с вход-выход >> >>> >> >>> 30 июня 2016 г., 19:46 пользователь Akzhan Abdulin >> >>> <[email protected]> написал: >> >>> > оно? >> >>> > >> >>> > >> >>> > >> >>> > https://github.com/plack/Plack/blob/master/t/Plack-Middleware/lint_wrong_header_info.t >> >>> > >> >>> > 30 июня 2016 г., 19:25 пользователь Гришаев Анатолий >> >>> > <[email protected]> >> >>> > написал: >> >>> >> >> >>> >> Добрый день Moscow PM! >> >>> >> >> >>> >> >> >>> >> Пишу тесты для сложной функции-монстра >> >>> >> >> >>> >> На вход принимает строку и на выход "почти" строку. >> >>> >> >> >>> >> >> >>> >> Сейчас тесты выглядят так >> >>> >> //////////////////////////// >> >>> >> my ($want_result, $input) = ( "вход 1", "выход 1") >> >>> >> >> >>> >> my $r = my_func($input) >> >>> >> ok($r) >> >>> >> is($r->string, $want_result, "parse $input") >> >>> >> >> >>> >> my ($want_result, $input) = ( "вход 2", "выход 2") >> >>> >> >> >>> >> my $r = my_func($input) >> >>> >> ok($r) >> >>> >> is($r->string, $want_result, "parse $input") >> >>> >> ////////////////////////// >> >>> >> >> >>> >> Получается куча повторяющего кода, в котором теряется суть >> >>> >> >> >>> >> Можно ли этого избежать и писать более красиво? >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> -- >> >>> >> Moscow.pm mailing list >> >>> >> [email protected] | http://moscow.pm.org >> >>> >> >> >>> > >> >>> > >> >>> > -- >> >>> > Moscow.pm mailing list >> >>> > [email protected] | http://moscow.pm.org >> >>> > >> >>> -- >> >>> Moscow.pm mailing list >> >>> [email protected] | http://moscow.pm.org >> >> >> >> >> > >> > >> > -- >> > Moscow.pm mailing list >> > [email protected] | http://moscow.pm.org >> > >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org > > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
