首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl单元测试深层结构

Perl单元测试深层结构
EN

Stack Overflow用户
提问于 2011-02-08 19:01:28
回答 4查看 722关注 0票数 2

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

EN

回答 4

Stack Overflow用户

发布于 2011-02-08 20:36:20

我正在使用Test::Moreis_deeply作为下一个评论者。我还通过创建t/sample/目录实现了某种程度上的自动化比较,通过手动运行测试并在适当的地方使用Data::Dumper,我在其中存储了期望值。(哦,我最好用YAML -- TMTOWTDI!)

也就是说,您运行转储生成器一次,检查转储结构,提交它们,然后只依赖is_deeply,直到测试中断,这意味着要么是错误,要么是预期的结构更改。

票数 4
EN

Stack Overflow用户

发布于 2011-02-08 19:20:27

出于这个目的,我通常可以使用来自Test::Moreis_deeply。我还在一些项目中使用了Test::Differences -它在非平等方面似乎有更好的输出。

票数 2
EN

Stack Overflow用户

发布于 2014-06-13 00:31:48

如果您只是想测试一下这个结构,可以试试Data::Validate::Struct

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

这里最重要的是,这个模块验证的是数据类型,而不是实际的数据。

例如:

代码语言:javascript
复制
my $exp = {
'body' => {
    'results' => [
        {
            'template' => [
                {
                    'origin' => 'word',
                    'name' => 'word',
                    'id' => 'int',
                    'attributes' => [
                       {
                           'value' => 'number',
                           'key' => 'word'
                       },
                       {
                           'value' => 'text' ,
                           'key' => 'word'
                       }
                    ],
                    'hostname' => 'hostname',
                }
            ]
        }
        ]
    }
};

然后

代码语言:javascript
复制
my $v = new_ok('Data::Validate::Struct', [ $exp ]);
ok($v->validate($act), 'validate an exp against an act' . $v->errstr());

我将根据$exp验证$act的结构

试着在模块上看看Tests ,我发现它非常有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4932218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档