0

ハッシュに特定のキーと値が含まれていることをテストする効率的な方法は何ですか?

効率的とは、次の項目を意味します。

  • 失敗したときに出力を読みやすい
  • 読みやすいテストソース
  • まだ機能するための最短テスト

Rubyでは、大きなハッシュを作成しなければならないことがあります。これらのハッシュをテストする効率的な方法を学びたいと思います。

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

これにはいくつかの方法があります。私が最もよく使用する2つの方法は、一度にハッシュ全体、または単一のアイテムです。

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]

ハッシュの残りの部分をテストするにはどうすればよいですか?

4

2 に答える 2

2

テストするときは、管理しやすいチャンクを使用する必要があります。お気づきのとおり、巨大なハッシュに対してテストすると、何が起こっているのかを追跡するのが難しくなります。

を使用してハッシュを配列に変換することを検討してくださいto_a。次に、集合演算子を使用して配列を簡単に比較し、欠落しているものや変更されているものを見つけることができます。

例えば:

[1,2] - [2,3]
=> [1]
[2,3] - [1,2]
=> [3]
于 2012-10-10T00:30:12.883 に答える
0

ハッシュに対してメソッドを使用hashして、そのうちの 2 つまたはその一部を比較できます。

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

 h.hash == h1.hash
 => false 
于 2012-10-09T23:13:15.877 に答える