26

プライベートメソッドのテストを書くのは良い習慣ですか?

次の簡単な例を考えてみましょう。

class Group
  has_many :members

  private

  def release_members
    members.each { |member| member.update_attributes group_id: nil }
  end
end

RSpec で release_members メソッドのテストを書くのは良い習慣でしょうか? send ie を使用してメソッドを呼び出すテストを作成する必要があると思います。group.send(:release_members)これは時々眉をひそめます。

4

2 に答える 2

30

プライベート メソッドはクラスの内部メカニズムに属しているため、テストしないでください。単体テストの目的は、クラスのインターフェイス、つまり public メソッドを介して対話するときに、クラスが期待どおりに動作することを確認することです。

特定の時点で長いプライベート メソッドに慣れていない場合は、おそらく、そのロジックをクラスの外に引き出して、別のモジュールまたはクラスを構築する機会があるためです。次に、それを単体テストできます。これも、そのインターフェイス、つまりパブリック メソッドのみです。

まれに、内部ロジック全体が非常に複雑で問題を分割したい場合に、プライベート メソッドをテストする必要があります。しかし、99.9% では、プライベート メソッドをテストすることは悪い考えです。

于 2013-04-24T16:36:13.637 に答える