[英]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.