有没有一种在Ruby中测试父类的好方法?

时间:2017-04-13 15:48:21

标签: inheritance rspec

我有一个将继承自Ruby的类。有没有一种方法可以在Rspec中测试这个类?您是否会在测试中创建子类并让它们从父级继承以查看子级是否具有适当的方法?例如:

说这是我们的父类:

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没有设置任何实例变量,这正是我所期待的。有没有好的方法来测试这个?我是以错误的方式解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

在规范中创建类是没有意义的。

我会在应用代码中定义类:

class DummyAnimal < Animal
  ...
end

在规格

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

答案 1 :(得分:0)

  

您是否会在测试中创建子类并让它们从父级继承以查看子级是否具有相应的方法?

没有。测试写的代码。继承是Ruby类的基本特性,让Ruby的作者确保它的工作原理。外部库,宝石和其他第三方代码也是如此。

如果要从另一个类继承一个类,或者从模块中混合代码,则每个单元(类或模块)都应该有自己的测试。当一个类扩展另一个类的行为时,您应该只测试添加或覆盖的新功能。