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