Использование scalamock для макета объекта, который «работает» в конструкторе - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь смоделировать класс, который принимает некоторые параметры ctor и выполняет некоторую работу в конструкторе.

Кроме обертывания непослушного класса, который я пытаюсь смоделировать, есть ли в ScalaMock что-нибудь, что на самом деле позволит избежатьвызов конструктора (так как он в настоящее время выбрасывает NPE в методе конструкции)

1 Ответ

0 голосов
/ 09 декабря 2018

Нет, это невозможно.Все mocks являются подклассами типа для mock, поэтому конструктор всегда будет вызываться.Однако вы можете создать макеты для типов, используемых в конструкторе, и указать конкретный подтип.Например,

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"
  }
}
...