Я тестирую функцию, которая возвращает массив.Массив может отличаться в зависимости от среды, но у него всегда будет хотя бы одно постоянное значение (то, которое я хочу протестировать).
Поскольку я использую Perl 5.12, я могу использовать оператор smartmatch, чтобы найтиесли элемент находится в массиве:
ok($known_value ~~ @returned, 'testing method abc')
Но мне нравится расширенный вывод is
и like
с "найденными" и "ожидаемыми" частями.Итак, я попробовал это:
cmp_ok($known_value, '~~', @returned, 'testing method abc')
Это не работает, потому что кажется, что cmp_ok
ожидает скаляр в обеих частях сравнения:
not ok 1 - testing method abc
# Failed test 'testing method abc'
# at abc.t line 53.
# 'stable_value'
# ~~
# '2'
Массив в "ожидаемослот вычисляется в скалярном контексте и преобразуется в 2.
Я могу обойти это с помощью хака, используя like
и строкового массива, но имея тест, в котором вы можете использовать оператор smartmatch в качестве метода сравнения(вроде when
) было бы неплохо.Есть ли способ сделать это с помощью Test :: More или другого модуля?
В настоящее время я использую:
ok($known_value ~~ @returned, 'testing method abc')
or diag (
"ERROR:\n".
"Found: ". Dumper @returned."\n".
"Expected at least one element equal to '$known_value'"
)
Это лучшее, что я могу сделать?