使用scalamock模拟在构造函数中执行“工作”的对象

时间:2018-12-06 11:40:14

标签: scalamock

我正在尝试模拟一个带有一些ctor参数并在构造函数中完成某些工作的类。

除了包装我要模拟的顽皮类外,ScalaMock中还有什么可以避免调用构造函数的方法(因为它当前在construct方法中抛出了NPE)

1 个答案:

答案 0 :(得分:0)

不可能,这是不可能的。所有模拟都是模拟类型的子类,因此将始终调用构造函数。 但是,您可以为构造函数中使用的类型构造模拟并指定一个具体的子类型。例如

import ConstructorWorkaroundTest.{HardToMock, Something}
import org.scalamock.scalatest.MockFactory
import org.scalatest.FunSuite

class ConstructorWorkaroundTest extends FunSuite with MockFactory {
  test("does not work") {
    val m = mock[HardToMock]
  }

  test("works") {
    val s = stub[Something]
    class BetterToMock extends HardToMock(s)
    val m = mock[BetterToMock]

    m.foo _ expects() returning "hello" once()
    m.foo()
  }
}

object ConstructorWorkaroundTest {
  trait Something { def length: Int }

  class HardToMock(s: Something) {
    val naughty = s.length
    def foo() = "hi"
  }
}