【问题标题】:Negated is_deeply() function in Test::MoreTest::More 中的否定 is_deeply() 函数
【发布时间】:2022-01-21 01:35:49
【问题描述】:

Test::More 有 is_deeply() 并在 documentation 中提到应该使用它而不是 eq_array()eq_hash(),因为它具有更好的诊断功能,并且它声明 ...它们可能是在未来的版本中已弃用

现在我将 eq_...() 函数的使用替换为 is_deeply() 但我遇到了一个问题,没有 is_not_deeply() 或这样的函数,我有一个这样的测试:

ok (!eq_hash(\%h1, \%h2));

我可以使用惯用的替代方法来测试深度不等式,最好使用 Test::More?

eq_hash()不同,它只返回true或false,需要包裹在ok()中,is_deeply()本身就是一个测试。因此,如果您将其包装在“ok()”中,如下所示:

ok(!is_deeply(\%h1, \%h2));

现在有两个测试,is_deeply() 失败,ok() 将通过!

【问题讨论】:

  • 文档说它们是等价的,所以否定应该是等价的。你有什么理由不能做ok ( !is_deeply(...))?
  • 因为与 eq_hash 不同,is_deeply 本身就是一个测试。因此,如果你将它包装在“ok()”中,就会有两个测试,is_deeply 失败和 ok,会通过!
  • 如果此功能在Test::More 中不可用,您可以尝试改用Test2 中的isnt
  • @MichielB 您应该在问题中提及这一点。输入代码并显示它是如何不工作的以及为什么不工作。然后你可能会得到答案。这个问题很模糊。
  • @TLP 我已经澄清了我的问题来解释这一点

标签: unit-testing perl test-more


【解决方案1】:

Test::More 似乎无法轻松使用此功能。那么我会推荐使用Test2 代替:

use strict;
use warnings;
use Test2::V0;

my %h1 = (a => [1,2,3], b=>"x");
my %h2 = (a => [1,2,3], b=>"x");

isnt (\%h1, \%h2, "Hashes are not equal" );
done_testing;

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2010-09-07
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2013-08-22
    • 2015-11-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多