<div dir="ltr"><div>Когда тест фейлится то печатает номер строки из которой был вызван is() <br></div><div>а если используешь $tb->is_eq, то печатается номер строки где была вызвана test_case.<br><br></div><div>в первом случае это одна строка на все тесты, а во втором на каждый тест своя строка.<br><br></div><div>Помогает, если ты не имеешь доступа к той тачке, где тесты проходят(cpan-testers например)<br></div><div></div><div>В первом случае ты знаешь, что какой-то тест в файле сломался, а во втором знаешь какой именно тест сломался, <br>даже если ты не дал для него имя или у двух тестов оно каким-то образом получилось одинаковым (бывало, такова жизнь).<br><br><br><br></div><div><br></div><br></div><div class="gmail_extra"><br><div class="gmail_quote">30 июня 2016 г., 21:07 пользователь Victor Efimov <span dir="ltr"><<a href="mailto:victor@vsespb.ru" target="_blank">victor@vsespb.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">а зачем, кстати, $tb ?<br>
<br>
30 июня 2016 г., 20:59 пользователь Гришаев Анатолий<br>
<div class="HOEnZb"><div class="h5"><<a href="mailto:agrishaev@gmail.com">agrishaev@gmail.com</a>> написал:<br>
> Спасибо Акжан и Виктор за ваши варианты.<br>
><br>
> Вообщем использовал обе идеи и добавил, что-то от себя.<br>
> 1) использовал именованные параметры для ясности<br>
> 2) Завернул в функцию<br>
> 3) Используем номера строк для нахождения failing case<br>
><br>
> Получилось в итоге.<br>
> =========================<br>
> test_case(<br>
>    input => "input 1",<br>
>    output => "result 1",<br>
> );<br>
> ...<br>
> test_case(<br>
>    input => "input 2",<br>
>    output => "result 2",<br>
> );<br>
><br>
> sub test_case{<br>
>      my $tb = Test::Builder->new;<br>
>      ...<br>
>       $tb->is_eq( ... );<br>
> };<br>
> =========================<br>
><br>
><br>
> 30 июня 2016 г., 20:21 пользователь Гришаев Анатолий <<a href="mailto:agrishaev@gmail.com">agrishaev@gmail.com</a>><br>
> написал:<br>
><br>
>> Не совсем эквивалентно теряется информация о строке в которой определен<br>
>> тест<br>
>><br>
>> Можно твой вариант улучшить чуть-чуть<br>
>><br>
>> вместо<br>
>> .............<br>
>> sub test_case {<br>
>>   my ($want_result,  $input) = @_;<br>
>><br>
>>   my $r = my_func($input)<br>
>>   ok($r)<br>
>>   is($r->string, $want_result, "parse $input")<br>
>> }<br>
>> ..........................<br>
>><br>
>> Лучше писать<br>
>> ////////////////////<br>
>><br>
>> sub test_case {<br>
>>   my ($want_result,  $input) = @_;<br>
>> +my $tb = Test::Builder->new;<br>
>>   my $r = my_func($input)<br>
>>   $tb->ok($r)<br>
>>   -is($r->string, $want_result, "parse $input")<br>
>>   +$tb->is_eq($r->string, $want_result, "parse $input");<br>
>> }<br>
>> /////////////////////<br>
>><br>
>> Я от подобного варианта ушел, не смог заставить писать в таком стиле,<br>
>> из-за собственных требований к красоте.<br>
>><br>
>><br>
>><br>
>> 30 июня 2016 г., 19:53 пользователь Victor Efimov <<a href="mailto:victor@vsespb.ru">victor@vsespb.ru</a>><br>
>> написал:<br>
>><br>
>>> или<br>
>>> я переодически делаю вместо<br>
>>> ===<br>
>>> my ($want_result,  $input) = ( "вход 1", "выход 1")<br>
>>><br>
>>> my $r = my_func($input)<br>
>>> ok($r)<br>
>>> is($r->string, $want_result, "parse $input")<br>
>>> ===<br>
>>><br>
>>> так:<br>
>>><br>
>>> ===<br>
>>> sub test_case {<br>
>>>   my ($want_result,  $input) = @_;<br>
>>><br>
>>>   my $r = my_func($input)<br>
>>>   ok($r)<br>
>>>   is($r->string, $want_result, "parse $input")<br>
>>> }<br>
>>><br>
>>> test_case( "вход 1", "выход 1");<br>
>>> test_case( "вход 2", "выход 2");<br>
>>> test_case( "вход 3", "выход 3");<br>
>>> test_case( "вход 4", "выход 4");<br>
>>> ===<br>
>>><br>
>>> что-то в общем-то эквивалентно готовому хэшу с вход-выход<br>
>>><br>
>>> 30 июня 2016 г., 19:46 пользователь Akzhan Abdulin<br>
>>> <<a href="mailto:akzhan.abdulin@gmail.com">akzhan.abdulin@gmail.com</a>> написал:<br>
>>> > оно?<br>
>>> ><br>
>>> ><br>
>>> > <a href="https://github.com/plack/Plack/blob/master/t/Plack-Middleware/lint_wrong_header_info.t" rel="noreferrer" target="_blank">https://github.com/plack/Plack/blob/master/t/Plack-Middleware/lint_wrong_header_info.t</a><br>
>>> ><br>
>>> > 30 июня 2016 г., 19:25 пользователь Гришаев Анатолий<br>
>>> > <<a href="mailto:agrishaev@gmail.com">agrishaev@gmail.com</a>><br>
>>> > написал:<br>
>>> >><br>
>>> >> Добрый день Moscow PM!<br>
>>> >><br>
>>> >><br>
>>> >> Пишу тесты для сложной функции-монстра<br>
>>> >><br>
>>> >> На вход принимает строку  и на выход "почти" строку.<br>
>>> >><br>
>>> >><br>
>>> >> Сейчас тесты выглядят так<br>
>>> >> ////////////////////////////<br>
>>> >> my ($want_result,  $input) = ( "вход 1", "выход 1")<br>
>>> >><br>
>>> >> my $r = my_func($input)<br>
>>> >> ok($r)<br>
>>> >> is($r->string, $want_result, "parse $input")<br>
>>> >><br>
>>> >> my ($want_result,  $input) = ( "вход 2", "выход 2")<br>
>>> >><br>
>>> >> my $r = my_func($input)<br>
>>> >> ok($r)<br>
>>> >> is($r->string, $want_result, "parse $input")<br>
>>> >> //////////////////////////<br>
>>> >><br>
>>> >> Получается куча повторяющего кода, в котором теряется суть<br>
>>> >><br>
>>> >> Можно ли этого избежать и писать более красиво?<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> --<br>
>>> >> Moscow.pm mailing list<br>
>>> >> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
>>> >><br>
>>> ><br>
>>> ><br>
>>> > --<br>
>>> > Moscow.pm mailing list<br>
>>> > <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
>>> ><br>
>>> --<br>
>>> Moscow.pm mailing list<br>
>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
>><br>
>><br>
><br>
><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div>