如何在不增加测试计数的情况下使用Perl的Test :: Deep :: cmp_deeply?

时间:2009-08-13 21:38:41

标签: perl testing

看起来Test::Deep的灵感来自于is_deeply。我的问题是如何让cmp_deeply部分测试而不是测试?因为我的测试列表只有8个,但每次我使用cmp_deeply时,它都算作测试,当我只有8个函数时,我的实际测试次数为11(因为我称之为cmp_deeply 3次) 。我不想增加测试次数。有更可行的解决方案吗?

2 个答案:

答案 0 :(得分:8)

您应该使用eq_deeply代替:

  

这与cmp_deeply()相同   除了它只返回true或false。   它不会创建诊断...

答案 1 :(得分:2)

您可以做很多事情,但在不了解测试中的更多细节的情况下,很难知道哪个是最合适的:

  • 不要计划特定数量的测试。

    use Test::More;
    
    all(
        cmp_deeply($got0, $expected0),
        cmp_deeply($got1, $expected1),
        cmp_deeply($got2, $expected2)
       );
    
    # ... your other 7 tests
    done_testing();  # signals that we're all done.. exiting normally.
    
  • 动态确定正在运行的测试数量,如果您正在测试某些深度和动态结构,这是有意义的,这些结构的复杂性(以及所需的测试数量)事先是未知的:

    use Test::More;
    use Test::Deep;
    
    # perhaps this is in some sort of loop?
    cmp_deeply($got0, $expected0);  $numTests++;
    cmp_deeply($got1, $expected1);  $numTests++;
    cmp_deeply($got2, $expected2);  $numTests++;
    
    # ... your other 7 tests
    
    # TAP output must be either at the beginning or end of all output
    plan tests => $numTests + 7;
    
    # no more tests here!
    exit;