提问者:小点点

如何创建包专用类的模拟对象


我有一堂课。它有一个带有工厂方法的伴随对象 A

类 A private[somepackage](x: Int) {

}

对象A { def createA(y:Int):A = { new A(y)} }

现在,我需要在不同包中的scalatest文件中创建< code>A的模拟对象。

当我付出时

私人 val a = 模拟[A] --

无法访问类 A 中的构造函数 A


共2个答案

匿名用户

在测试源中,在同一个包中创建一个双重测试:

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是您现在使用的