在Scala中,我可以编写一个实现特征的单例对象。
trait Greeter {
def greet = "Hello"
}
object MyGreeterObject extends Greeter
然后我可以很容易地在我的测试中模拟Greeter
var mockGreeter = new Greeter {
override def greet = "I'm a mock"
}
在Ruby中有相同的方法吗?最终,我希望能够模拟一些不需要状态的方法,并且最好通过对象级方法提供(在Scala中)。一旦我拥有了这个,我希望能够为我的测试进行模拟。
答案 0 :(得分:5)
它在Ruby中称为Mixin,它由Modules实现。
module Greeter
def greet
'Hello'
end
end
# extending a specific object
o = Object.new.extend(Greeter)
p o.greet
# creating a specific class
MyGreeter = Class.new.extend(Greeter)
p MyGreeter.greet
但Ruby中的模拟很简单。它不依赖于方式,构建对象。查看您最喜欢的Ruby测试框架的文档。
o = Object.new
o.expect(:greet, 'Hi, I am a mock')
p o.greet