我有一堂课。它有一个A
带有工厂方法的伴随对象。
A类私有[somepackage](x:Int){
}
对象 A { def createA(y: Int): A = { new A(y) } }
现在我需要A
在不同包中的 scalatest 文件中创建模拟对象。
当我给
private val a = mock[A] --> 我得到编译错误。
<< >>中无法访问A
类中的构造函数。有没有更好的方法来模拟对象?A
somewhere
我有一堂课。它有一个A
带有工厂方法的伴随对象。
A类私有[somepackage](x:Int){
}
对象 A { def createA(y: Int): A = { new A(y) } }
现在我需要A
在不同包中的 scalatest 文件中创建模拟对象。
当我给
private val a = mock[A] --> 我得到编译错误。
<< >>中无法访问A
类中的构造函数。有没有更好的方法来模拟对象?A
somewhere
在您的测试源中,在同一个包中创建一个测试替身:
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
是你现在的工作