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.

Другие вопросы по тегам