[Moscow.pm] Научите писать красивые тесты

Гришаев Анатолий agrishaev на gmail.com
Чт Июн 30 10:59:37 PDT 2016


Спасибо Акжан и Виктор за ваши варианты.

Вообщем использовал обе идеи и добавил, что-то от себя.
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 пользователь Гришаев Анатолий <agrishaev на gmail.com>
написал:

> Не совсем эквивалентно теряется информация о строке в которой определен
> тест
>
> Можно твой вариант улучшить чуть-чуть
>
> вместо
> .............
> 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 <victor на vsespb.ru>
> написал:
>
> или
>> я переодически делаю вместо
>> ===
>> 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
>> <akzhan.abdulin на gmail.com> написал:
>> > оно?
>> >
>> >
>> https://github.com/plack/Plack/blob/master/t/Plack-Middleware/lint_wrong_header_info.t
>> >
>> > 30 июня 2016 г., 19:25 пользователь Гришаев Анатолий <
>> agrishaev на gmail.com>
>> > написал:
>> >>
>> >> Добрый день 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
>> >> moscow-pm на pm.org | http://moscow.pm.org
>> >>
>> >
>> >
>> > --
>> > Moscow.pm mailing list
>> > moscow-pm на pm.org | http://moscow.pm.org
>> >
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20160630/ce3bc9dc/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm