Scala Mock: MockFunction0-1 () один раз (никогда не вызывается - неудовлетворен) - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над объектом scala, чтобы выполнить некоторое тестирование

Мой стартовый объект выглядит следующим образом

object obj1 {
def readvalue : IO[Float] = IO{
scala.io.StdIn.readFloat()
}
} 

Тестирование должно быть 1-значением типа FLOAT 2- должно быть меньше 3

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

class FileUtilitiesSpec
    extends FlatSpec
    with Matchers
    with MockFactory
    {

  "value" should "be of Type Float" in {
    val alpha = mockFunction[() => IO[Float]]
    alpha.expects shouldBe a[IO[Float]]

  }
  "it" should "be less than 3" in {
    val alpha = mockFunction[() => IO[Float]]
    alpha.expects shouldBe <(3)

  }

} 

Я получаю сообщение об ошибке, в котором говорится:


 MockFunction0-1() once (never called - UNSATISFIED) was not an instance of cats.effect.IO, but an instance of org.scalamock.handlers.CallHandler0
ScalaTestFailureLocation: util.FileUtilitiesSpec at (FileUtilitiesSpec.scala:16)
Expected :cats.effect.IO
Actual   :org.scalamock.handlers.CallHandler0 ```


1 Ответ

0 голосов
/ 16 апреля 2020

Я бы рекомендовал прочитать примеры здесь как отправную точку: https://scalamock.org/quick-start/

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

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

...