2016-10-01 97 views
1

我的Scala应用程序(阿卡服务)上的一个二传手有PersonBuilder斯卡拉:一个单独的对象

PersonBuilder类有一个REST客户端,获取一些数据,建立实体之前。

应该永远只能是在任何一个时间一个实例此PersonBuilder在我的应用程序的

很明显,我可以在这里使用一个PersonBuilder对象,但问题是我想在运行单元测试时传入模拟REST客户端。

对Scala中被认为是不好的练习的对象调用setter? 如果完成安全并保证只发生过一次,那么肯定它是一种可以使用的技术?

很明显,创建一个封装了REST客户端的类也可以完成,但问题是我必须在没有依赖注入框架的情况下在我的代码中传递这个类。

目前在Scala中是否有任何约定呢?

回答

3
class PersonBuilder(rest: Rest) 
object PersonBuilder extends PersonBuilder(LiveRest) 
object TestPersonBuilder extends PersonBuilder(MockRest) 

如果你不想要构造函数参数,请使用特征。

trait PersonBuilder { 
    def rest: Rest 
} 
object PersonBuilder extends PersonBuilder { 
    override val rest = LiveRest 
} 
+0

非常有趣的方法,我不知道你能做到这一点 – DJ180

+0

为感兴趣的你有什么对物体设定方法的想法的事情? – DJ180

+1

@ DJ180如果您使用过滤器,请彻底清洗双手,以防止手指或袖子上的气味,用大量水冲洗,返回键盘并用上述任一种图案替换。 :) – flavian