2016-11-09 75 views
0

我试图测试一个函数,但是我测试的函数调用了我想存根的traits函数。我似乎无法使用ScalaMock来存储这个函数,因为我无法模拟该对象。ScalaMock继承对象ScalaTest的特征函数

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") 

这不能编译。

+0

如果在你的例子中commonFunction在testMe之外,你会有同样的问题吗? – Barry

回答

0

您不能用ScalaMock模拟对象,因为模拟[X]是X的一个子类。Scala不允许使用对象的子类。

如果您需要测试与commonFunction的协作,那么继承会让它变得相当困难。我会考虑用依赖注入来设计它。