Как вернуть значение Right значения Either в тесте Scala - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть метод, который возвращает либо [Exception, String]

class A {
    def validate(a: Any) = {
        case a: String => Left(...some.. exception)
        case a: Any => Right(a)
   }
 }

class B(a: A) {
    def callValidate(any: Any) = {
      a.validate(any)
 }

}

Теперь я пишу тесты для класса B и проверяю метод заглушки

class BTest  {
   val param: Any = "22"
   val a = mock[A]
   (a.validate _).expects(param).returning(....someValue...) // . this value should be Right(....) of either function. 
} 

Можно ли заглушить его таким образом, чтобы вернуть Right (.....) функции Either?

1 Ответ

0 голосов
/ 04 сентября 2018

Поскольку B берет объект a, вы можете создать новый объект A в классе BTest и переопределить метод validate, чтобы он возвращал все, что вы хотите, однажды вернув Right (a), а для покрытия левой части верните Left (a).

    class BTest  {
       val param: Any = "22"
       val a = new A{
override def validate(a:Any) = case _ => Right(a)
}
   (a.validate _).expects(param).returning(Right("22"))
} 

или вы можете сделать это так. Как предложено DarthBinks911 .

(a.validate _).expects(param).returning(Right("a"))

это будет нормально работать в данном сценарии, но если вы сделаете что-то вроде mockObject.something, то это даст вам исключение NullPointerException. Я бы посоветовал вам переопределить метод validate и вернуть то, что вы когда-либо захотите.

...