2012-10-09 29 views
0

什麼是測試哈希包含特定鍵和值的有效方法?在Ruby測試中驗證大哈希的有效方法

通過高效的我指的是以下項目:失敗時

  • 容易閱讀測試的源

    • 易於讀取輸出
    • 最短的測試仍然是功能

    有時Ruby我必須創建一個大的散列。我想了解一個有效的方法來測試這些散列:

    expected_hash = { 
        :one => 'one', 
        :two => 'two', 
        :sub_hash1 => { 
         :one => 'one', 
         :two => 'two' 
        }, 
        :sub_hash2 => { 
         :one => 'one', 
         :two => 'two' 
        } 
    } 
    

    我可以測試這有幾種方法。這兩種方式我用的最多是整個哈希一次,或單個項目:

    assert_equal expected_hash, my_hash 
    assert_equal 'one', my_hash[:one] 
    

    這些工作就像我們例如哈希散列小,但對於一個非常大的哈希這些方法打破。整個哈希測試將顯示太多的失敗信息。單項測試會讓我的測試代碼太大。

    我在想一個有效的方法是將測試分解成許多隻驗證部分散列的較小測試。每個這些較小的測試都可以使用整個哈希樣式測試。不幸的是,我不知道如何讓Ruby爲不在子哈希中的項目執行此操作。子哈希可以做如下:

    assert_equal expected_hash[:sub_hash1], my_hash[:sub_hash1] 
    assert_equal expected_hash[:sub_hash2], my_hash[:sub_hash2] 
    

    如何測試散列的其餘部分?

  • 回答

    1

    測試時,你需要使用可管理的塊。正如你發現的那樣,對巨大的哈希進行測試使得很難跟蹤發生的事情。

    考慮使用to_a將散列轉換爲數組。然後,您可以輕鬆使用集合運算符來比較數組,並找出丟失/更改的內容。

    例如:

    [1,2] - [2,3] 
    => [1] 
    [2,3] - [1,2] 
    => [3] 
    
    +0

    這個偉大的工程!你對期望值做一個更小的散列,然後#to_a它。減去我實際散列的#to_a版本。如果你沒有得到一個空數組,那麼一些期望的值就會丟失。 – Jason

    0

    您可以使用哈希hash方法他們或他們的部分比較2:

    h = {:test => 'test'} 
    => {:test=>"test"} 
    h1 = {:test => 'test2'} 
    => {:test=>"test2"} 
    h.hash 
    => -1058076452551767024 
    h1.hash 
    => 1300393442551759555 
    
    h.hash == h1.hash 
    => false