Многопараметрический метод заглушки с mockito- scala - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь заглушить метод с тремя параметрами, чтобы получить разные ответы относительно одного из этих параметров:

val mocked = mock[MyService]
mocked.someInitialization returns mock[State]
mocked.complexMethod(*, *, *) answers { (_:State, discriminant:Discriminant, _:Delegate[MyService]) => 
  discriminant match {
    case _:FirstKind => Right(Option.empty[String])
    case SecondKind(value:String) => Right(Some(value))
    case _ => ???
  }
}

Однако мой тест не пройден с сообщением выше:

SmartNull returned by this unstubbed method call on a mock:
myService.complexMethod(
    Mock for State, hashCode: 1730688778,
    FirstKind("UnusedValue"),
    my.system.FixturesAndMock$FakeDelegate@2b5f8e61
); (of class scala.util.Either$MockitoMock$854506859)

(Я не понимаю предложение " класса scala .util.Either $ MockitoMock $ 854506859 ")

Обратите внимание, что:

  • заглушка с mocked.complexMethod(*, *, *) returns Left(Nil) имеют ту же проблему.
  • использование any[State], any[Discriminant], any[Delegate[MyService]] вместо *, *, * ничего не меняет.

Я использую org.mockito.scalatest.IdiomaticMockito на Scala 2.12.8 на GraalVM. Что я делаю неправильно; Как я могу заглушить метод для возврата вычисленных ответов?

Спасибо

1 Ответ

0 голосов
/ 07 января 2020

Я не уверен на 100%, но, похоже, это вызвано последним параметром, Delegate[MyService]. Я подозреваю, что тип времени выполнения не соответствует типу для заглушки.

В настоящее время у меня есть метод, обеспечивающий тип в Delegate. Моя заглушка используется, и она дает более четкий взгляд на мой код, разрешая частичную функцию:

given(mock[MyService]).answering {
  case (_, _:FirstKind, _) =>
    Right(Option.empty[String])

  case (_, SecondKind(value), _) =>
    Right(Some(value))
}
...