【发布时间】:2013-07-17 14:16:15
【问题描述】:
在 scala 中有没有一种方法可以使用 MockitoSugar 来模拟作为 scala 单例的 object 的方法?
【问题讨论】:
在 scala 中有没有一种方法可以使用 MockitoSugar 来模拟作为 scala 单例的 object 的方法?
【问题讨论】:
处理单例进行模拟的最佳选择是首先对单例本身的结构进行一些修改。使用 trait 来定义操作,然后让对象像这样扩展 trait:
trait Fooable{
def doFoo:String = "foo"
}
object Foo extends Fooable
然后,在任何需要 Foo 对象的类中,将其声明为输入或可以设置的内容 (DI),但将其声明为 trait,而不是像这样:
class MyFooUser(foo:Fooable = Foo){
}
默认情况下它使用对象,但是在为您的测试构建时,您可以给它一个模拟的Fooable。有很多方法可以处理将Fooable 纳入您的课程(这是一种),而这实际上不在此答案的范围内。答案实际上是首先使用特征来定义方法,然后让对象扩展该特征,然后在任何需要它的类中将其称为特征。这将使您能够有效地模拟它。
【讨论】:
Mockito 对 objects 没有帮助,但您可以尝试改用 ScalaMock。
【讨论】: