如何在Crystal中的抽象类上规范实例方法?

KCE*_*KCE 2 crystal-lang

假设我有一个抽象类,它有一个非抽象的实例方法供子进行继承:

# - abstract.cr
abstract class Abstract
  def foo
    2
  end
end
Run Code Online (Sandbox Code Playgroud)

我该怎么写这个规格?

# - abstract_spec.cr

it "returns 2 from #foo" do
  Abstract.instance.foo.should eq 2 #???
end
Run Code Online (Sandbox Code Playgroud)

KCE*_*KCE 6

可能有更好的方法(因此我发布问题,我很乐意从社区获得反馈),但我能想到的一种方法是让一个类继承测试中的父级.这样你就可以抽象地专注于类的"任何"实现.

# - abstract_spec.cr
class AbstractTest < Abstract
end

it "returns 2 from #foo" do
  AbstractTest.new.foo.should eq 2
end
Run Code Online (Sandbox Code Playgroud)