我有一堂课。它有一个带有工厂方法的伴随对象 A
。
类 A private[somepackage](x: Int) {
}
对象A { def createA(y:Int):A = { new A(y)} }
现在,我需要在不同包中的scalatest文件中创建< code>A的模拟对象。
当我付出时
私人 val a = 模拟[A] --
无法访问类 A 中的构造函数
A
在测试源中,在同一个包中创建一个双重测试:
package somepackage
class MockableA extends A(0)
然后在测试中创建一个mock[MockableA]
,然后照常继续。
但是,如果您愿意更改产品源代码以方便测试,那么代理/外观的答案应该也是可行的。
考虑使用代理访问类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
是您现在使用的