2017-04-13 7 views
0

私はRubyから継承されるクラスを持っています。 Rspecでこのクラスをテストする良い方法はありますか?テストで子クラスを作成し、子クラスが適切なメソッドを持っているかどうかを親クラスから継承させますか?たとえば:Rubyで親クラスをテストする良い方法はありますか?

が、これは私たちの親クラスであると言う:

class Animal 
    def breathe 
     "it's breathing" 
    end 

    def self.color(some_color) 
     @color = some_color 
    end 

    attr_reader :color 
end 

と我々のテストしかし

let(:dummy_animal) do 
    class DummyAnimal < described_class 
     color :brown 
    end 

    DummyAnimal 
end 

では、上記の動作しません。返されたDummyAnimalには、私が期待していたインスタンス変数が設定されていません。これをテストする良い方法はありますか?私はこれについて間違った方法をとっていますか?

+0

正確に何をテストしますか?私はあなたが他のクラスから継承することが重要だとは思わない - それは他のクラスの問題で他のクラスのスペックだからです。 –

答えて

0

スペックでクラスを作成することは意味がありません。

私はアプリのコードで定義されたクラスを持っているでしょう:スペックで

class DummyAnimal < Animal 
    ... 
end 

describe DummyAnimal 
    specify '#color' do 
    expect(subject.color).to eq 'brown' 
    end 
end 
0

あなたがテストに子クラスを作成し、それらは、親から継承しているだろう子供たちが適切な方法を持っているかどうかを見ますか?

いいえコードをテストします。継承は、Rubyクラスの基本的な機能です。Rubyの作者がそれが動作することを保証しましょう。外部の図書館、宝石、その他の第三者のコードも同様です。

あるクラスを別のクラスから継承する場合、またはモジュールからコードを混ぜる場合、各ユニット(クラスまたはモジュール)には独自のテストが必要です。あるクラスが別のクラスの動作を拡張する場合、追加またはオーバーライドされた新しい機能のみをテストする必要があります。

+0

しかし、親クラスをテストするにはどうしたらいいですか? – Jwan622

+0

親クラスのテストを個別に作成します。たとえば、あなたの例では、メソッド ':breathe'はAnimalで定義されているので、Animalの単体テストはそのメソッドをテストする必要があります。動物の単体テストも ':color'をカバーするべきです。子クラスが ':color'をオーバーライドする場合、子クラスはそれ自身の振る舞いの単位テストを持つべきです。 – zetetic

関連する問題