繁体   English   中英

Perl单元测试深层结构

[英]Perl unit testing deep structures

TMTOWTDI,我当然希望如此-每当遇到多维哈希(有时深度为4-5级)时,我就在最后几个项目中使用Test :: Deep。 现在,我通常的做法是输入这些哈希值并填写我的预期数据,然后运行cmp_deeply(actual, expected, msg) 有没有人对像这样的深层嵌套数据进行单元测试有任何建议? -我当前的方法似乎效率很低,有时一个数据结构的单元测试要花费一个多小时。

我正在使用Test :: Moreis_deeply就像下一个评论者一样。 我还通过在at / sample /目录中进行了某种程度的自动比较,在该目录中,我通过手动运行测试并在适当的地方使用Data :: Dumper来存储期望值。 (哦,我最好还是选择YAML -TMTOWTDI!)

即,您只运行一次dump-generator,查看转储的结构,提交它们,然后仅依赖于is_deeply直到测试中断,这意味着错误或预期的结构更改。

is_deeply ,我通常对Test :: More的 is_deeply 我还对某些项目使用了Test :: Differences-似乎在非平等方面有更好的输出。

如果您只想测试结构,请尝试Data :: Validate :: Struct

您需要定义一个参考数据结构,以与可以是任何级别深度,嵌套哈希/数组的任何组合的实际数据结构进行比较。

在此最需要注意的是,此模块验证数据类型,而不是实际数据。

例如:

my $exp = {
'body' => {
    'results' => [
        {
            'template' => [
                {
                    'origin' => 'word',
                    'name' => 'word',
                    'id' => 'int',
                    'attributes' => [
                       {
                           'value' => 'number',
                           'key' => 'word'
                       },
                       {
                           'value' => 'text' ,
                           'key' => 'word'
                       }
                    ],
                    'hostname' => 'hostname',
                }
            ]
        }
        ]
    }
};

接着

my $v = new_ok('Data::Validate::Struct', [ $exp ]);
ok($v->validate($act), 'validate an exp against an act' . $v->errstr());

将针对$exp验证$act的结构

尝试看看模块上的测试 ,我发现它非常有用。

也许OP意味着通过手动输入期望值而不是运行时间来消耗时间。 如果您具有良好的结构,则可以使用Data :: Dumper或Data :: Dump生成程序化文本,然后将其合并到测试中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM