Как я могу использовать MockitoSugar для имитации метода объекта (синглтона)?

Есть ли способ в scala использовать MockitoSugar, чтобы издеваться над методом object, который является синглтоном scala?


person Jas    schedule 17.07.2013    source источник


Ответы (2)


Лучше всего, чтобы иметь дело с синглтонами для насмешек, сначала немного переработать структуру самого синглтона. Используйте трейт для определения операций, а затем объект расширяет трейт следующим образом:

trait Fooable{
  def doFoo:String = "foo"
}

object Foo extends Fooable

Затем в любом классе, которому нужен объект Foo, объявите его как ввод или что-то, что можно установить (DI), но вместо этого объявите его как трейт следующим образом:

class MyFooUser(foo:Fooable = Foo){

}

Таким образом, по умолчанию он использует объект, но при конструировании для ваших тестов вы можете вместо этого дать ему имитацию Fooable. Существует множество способов справиться с получением Fooable в ваших классах (это один из них), и это не входит в рамки этого ответа. Ответ на самом деле заключается в том, чтобы сначала использовать трейт для определения методов, а затем объект расширяет этот трейт, а затем ссылается на него как на трейт в любом классе, который в нем нуждается. Это позволит вам эффективно издеваться над ним.

person cmbaxter    schedule 17.07.2013

Mockito не поможет с objects, но вместо этого вы можете попробовать использовать ScalaMock.

person chemikadze    schedule 17.07.2013
comment
Нет поддержки в ScalaMock 3... ждем версии 4. - person Dragonborn; 22.10.2016