Когда тест фейлится то печатает номер строки из которой был вызван 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
