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

相关问题