2017-04-13 37 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

爲父類編寫一個單獨的測試。例如,在你的例子中,動物中定義了':呼吸'的方法,所以動物的單元測試應該測試該方法。動物的單元測試還應該包含':color'。如果一個子類覆蓋':color',它應該有自己的行爲單元測試。 – zetetic

相關問題