我可以在Test :: More的cmp_ok中使用智能匹配~~吗?

Pab*_*cia 1 testing perl smartmatch

我正在测试一个返回数组的函数.根据环境,数组可能会有所不同,但它总是至少有一个常量值(我要测试的值).

当我使用Perl 5.12时,我可以使用smartmatch运算符来查找元素是否在数组中:

ok($known_value ~~ @returned, 'testing method abc')
Run Code Online (Sandbox Code Playgroud)

但我喜欢的增强的输出is,并like与"发现"和"预期"的部分.所以我尝试了这个:

cmp_ok($known_value, '~~', @returned, 'testing method abc')
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它似乎cmp_ok在比较的两个部分中都需要标量:

not ok 1 - testing method abc
#   Failed test 'testing method abc'
#   at abc.t line 53.
#     'stable_value'
#         ~~
#     '2'
Run Code Online (Sandbox Code Playgroud)

"预期"槽中的数组在标量上下文中计算并转换为2.

我可以使用hack使用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'"
  )
Run Code Online (Sandbox Code Playgroud)

这是我能做的最好的吗?

Mic*_*man 9

@returned由于Perl如何将参数传递给子例程,因此无法使用.(数组被压平到参数列表中并失去其身份.)传递数组引用:

cmp_ok($known_value, '~~', \@returned, 'testing method abc')
Run Code Online (Sandbox Code Playgroud)

智能匹配运营商足够聪明,可以做正确的事情.来自perlsyn:

请注意,智能匹配隐式取消引用任何非祝福的散列或数组引用,因此"哈希"和"数组"条目适用于这些情况.