簡體   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