我上课。它有一个带有工厂方法的伴随对象A
。
class A private [somepackage](x:Int){
}
对象A { def createA(y:Int):A = { 新的A(y) } }
现在,我需要在其他程序包中的scalatest文件中创建A
的模拟对象。
我给
priv val a =模拟[A]->我收到编译错误。
无法在<< {A
>>中访问类A
中的构造函数somewhere
。
有没有更好的方法来模拟对象?
答案 0 :(得分:1)
在您的测试源中,在同一程序包中创建一个双重测试:
package somepackage
class MockableA extends A(0)
然后只需在测试中创建一个mock[MockableA]
,然后照常进行即可。
但是,如果您愿意更改生产来源以方便测试,则使用代理/外观的答案也应该起作用。
答案 1 :(得分:0)
考虑使用代理访问类A,然后对该代理类进行存根/模拟。
例如,如果A.doStuff
是您要模拟/存根的对象,而A.accessStuff
是您在代码中需要的对象,则创建一个类
class ADecorated(underlying: A) {
def doStuff() {
underlying.doStuff()
// whatever I want to do
}
def accessStuff() {
x = underlying.accessStuff()
// do something else and return
}
// Any other method you want to use
}
用新的A.createA
代替ADecorated(A.createA())
的用法。 ADecorated
是您现在使用的东西