我正在尝试使用蛋糕图案和模拟。在阅读了一堆包含大量时髦术语的博客文章后,我无法让它发挥作用:(
我正在使用 Spray 并拥有以下 http 服务
trait ApiServiceAbstract extends HttpService with SprayJsonSupport {
this : AppProvider =>
// tons of routes here
}
AppProvider
在哪里
trait AppProvider {
val api : ApiManager
}
对于真正的服务器,我像这样组合它
class ApiServiceActor extends Actor with ApiServiceAbstract with RealApiManager {
}
在哪里RealApiManager
延伸AppProvider
。
也ApiManager
必须混入DbProvider
其中看起来像这样
trait ApiManager {
this : DbProvider =>
}
trait RealDbProvider extends DbProvider {
override lazy val dbManager = new DBManager
}
在我的单元测试中,我只想测试 http 部分并进行了模拟ApiManager
,它只是检查客户端传递的对象是否正确。
我不能做到这一点
override lazy val api = mock[ApiManager]
因为ApiManager
必须与DbProvider
. 我怎样才能解决这个问题 ?我现在看到两个选项:
- 切换到可以使用带参数的构造函数实例化类的模拟库(例如 Mockito)
- 添加
init(db : DBManager)
方法并拥有var
其中ApiManager
丑陋的