ScalaMock Унаследованная функция черты объекта ScalaTest
Я пытаюсь протестировать функцию, однако функция, которую я тестирую, вызывает функцию traits, которую я хотел бы заглушить. Я не могу заглушить эту функцию с помощью ScalaMock, так как я не могу смоделировать объект.
trait[A<:CommonReturn] commonTrait[A] {
def commonFunction(s:String):(String,String) = {
("Hello","World")
}
def testMe(s:String) : A
}
Эта черта затем расширяется многими Объектами, каждый из которых реализует commonTrait и возвращает свой конкретный подтип общего возврата.
object ob extends commonTrait[ConcreteType] {
override def testMe(s:String){
val(x,y) = commonFunction(s)
val z = "unique logic"
ConcreteType(x,y,z)
}
}
Поэтому я сейчас пытаюсь протестировать ob.testMe, однако не могу воспроизвести объект ob, поэтому не могу заглушить commonFunction.
Это из-за моей архитектуры? Или возможно ли смоделировать объект с помощью scamamock и использовать scalatest?
val mocked = mock[ob]
(mocked.commonFunction _).expect(*).returning("test","test")
Это не компилируется.
1 ответ
Вы не можете макетировать объекты с помощью ScalaMock, так как макет [X] является подклассом X. Scala не допускает подклассы объектов.
Если вам нужно проверить сотрудничество с этим commonFunction
тогда наследование делает это довольно трудным. Я хотел бы рассмотреть возможность разработки с помощью Dependency Injection.