Я хотел бы иметь возможность издеваться над моей функцией вызова по имени с помощью ScalaMock, чтобы он мог запускать переданную функцию внутри моего макета.
class MyTest extends Specification with MockFactory {
trait myTrait {
def myFunction[T](id: Int, name: String)(f: => T): Either[ErrorCode,T]
}
def futureFunction() = Future {
sleep(Random.nextInt(500))
10
}
"Mock my trait" should {
"work" in {
val test = mock[myTrait]
(test.myFunction (_: Int)(_: String)(_: T)).expects(25, "test",*).onCall {
_.productElement(2).asInstanceOf[() => Either[ErrorCode,T]]()
}
test.myFunction(25)("test")(futureFunction()) must beEqualTo(10)
}
}
}
Я попытался издеваться над функцией следующим образом:
(test.myFunction (_: Int)(_: String)(_: T)).expects(25, "test",*).onCall {
_.productElement(2).asInstanceOf[() => Either[ErrorCode,T]]()
}
но когда я запускаю тест, я получаю эту ошибку:
scala.concurrent.impl.Promise$DefaultPromise@69b28a51 cannot be cast to Either
Как я могу издеваться над ним, чтобы он запускал мою futureFunction() внутри макета и возвращал результат.
returns(Either[ErrorCode, T])()
вместоonCall
. Хм, мне нужно запустить это, чтобы попытаться решить эту проблему. - person Patryk Rudnicki   schedule 16.05.2018