Заблокированная функция не возвращает класс значения правильно в Scala - PullRequest
2 голосов
/ 27 сентября 2019

Мне нужно смоделировать функцию из произвольного типа в другой тип, который является .Например, со следующей подписью String => ValueClass.Вот как реализован мой :

final case class ValueClass(value: String) extends AnyVal

Я использую , чтобы смоделировать, и , чтобы сопоставить результат:

import org.mockito.{ArgumentMatchersSugar, MockitoSugar}
import org.scalatest.{Matchers, WordSpecLike}

class ValueClassMockTest 
   extends WordSpecLike
    with MockitoSugar
    with ArgumentMatchersSugar
    with Matchers {

  "mocked function" should {
    "return the same value class" in {
      val f: String => ValueClass = mock[String => ValueClass]

      when(f(any[String])).thenReturn(ValueClass("str"))

      f("anyStringValue") shouldEqual ValueClass("str")
    }
  }

}

Интересно, почему этот тест не проходит, а смоделированная функция возвращает развернутое значение?

"str" did not equal ValueClass(str)
ScalaTestFailureLocation: services.ValueClassMockTest at (ValueClassMockTest.scala:16)
Expected :ValueClass(str)
Actual   :"str"
<Click to see difference>

build.sbt

scalaVersion       = "2.12.10"
scalaTest          = "3.0.8"
mockitoScala       = "1.5.17"

1 Ответ

1 голос
/ 29 сентября 2019

Исправлено в v1.5.18 (https://github.com/mockito/mockito-scala/pull/152)

Проблема связана с тем, что в параметризованном возвращаемом типе отсутствует информация о типе во время выполнения, поэтому класс значений всегда упакован, я добавил дополнительные положениядля этих сценариев возвращается экземпляр в штучной упаковке.

Тем не менее, для таких вещей, как функции, я думаю, что это лучшая идея, чтобы вообще пропустить насмешку, если только функция не является нечистой или вы не хотите утверждать какое-то неортодоксальное поведение.

...