ScalaMock Унаследованная функция признака объекта ScalaTest

Я пытаюсь протестировать функцию, однако функция, которую я тестирую, вызывает функцию признаков, которую я хотел бы заглушить. Кажется, я не могу заглушить эту функцию с помощью 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.

Это связано с моей архитектурой? Или можно издеваться над объектом с помощью scalamock и использовать scalatest?

val mocked = mock[ob]
(mocked.commonFunction _).expect(*).returning("test","test")

Это не компилируется.


person Adam Pitt    schedule 09.11.2016    source источник
comment
у вас была бы такая же проблема, если бы в вашем примере commonFunction находилась за пределами testMe?   -  person Barry    schedule 09.11.2016


Ответы (1)


вы не можете имитировать объекты с помощью ScalaMock, поскольку mock[X] является подклассом X. Scala не допускает подклассы объектов.

Если вам нужно протестировать совместную работу с этим commonFunction, то наследование делает это довольно сложным. Вместо этого я бы подумал о разработке этого с внедрением зависимостей.

person Philipp    schedule 24.03.2017