Есть ли способ в scala использовать MockitoSugar
, чтобы издеваться над методом object
, который является синглтоном scala?
Как я могу использовать MockitoSugar для имитации метода объекта (синглтона)?
Ответы (2)
Лучше всего, чтобы иметь дело с синглтонами для насмешек, сначала немного переработать структуру самого синглтона. Используйте трейт для определения операций, а затем объект расширяет трейт следующим образом:
trait Fooable{
def doFoo:String = "foo"
}
object Foo extends Fooable
Затем в любом классе, которому нужен объект Foo
, объявите его как ввод или что-то, что можно установить (DI), но вместо этого объявите его как трейт следующим образом:
class MyFooUser(foo:Fooable = Foo){
}
Таким образом, по умолчанию он использует объект, но при конструировании для ваших тестов вы можете вместо этого дать ему имитацию Fooable
. Существует множество способов справиться с получением Fooable
в ваших классах (это один из них), и это не входит в рамки этого ответа. Ответ на самом деле заключается в том, чтобы сначала использовать трейт для определения методов, а затем объект расширяет этот трейт, а затем ссылается на него как на трейт в любом классе, который в нем нуждается. Это позволит вам эффективно издеваться над ним.
Mockito не поможет с object
s, но вместо этого вы можете попробовать использовать ScalaMock.