1

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

A类私有[somepackage](x:Int){

}

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

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

当我给

private val a = mock[A] --> 我得到编译错误。

<< >>中无法访问A类中的构造函数。有没有更好的方法来模拟对象?Asomewhere

4

2 回答 2

1

在您的测试源中,在同一个包中创建一个测试替身:

package somepackage

class MockableA extends A(0)

然后只需在您的测试中创建一个mock[MockableA]并照常继续。

但是,如果您愿意更改生产源以促进测试,那么使用代理/外观的答案也应该有效。

于 2018-07-27T21:50:30.943 回答
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是你现在的工作

于 2018-07-26T17:16:37.383 回答