如何在 Scala 测试中 return Either 的右值
How to return a value of Right value of Either in Scala test
我有一个方法 returns Either[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)
}
}
现在我为 class 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.
}
是否可以将它存根到 Either
函数的 return Right(.....)?
由于 B 正在获取 a 的对象,因此您可以在 BTest class 中创建一个新的 A 对象,并覆盖方法验证为 return 任何您想要的一次 return 对( a) 并覆盖 Left 部分 return 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。我建议你覆盖验证方法和 return 你想要的任何东西。
我有一个方法 returns Either[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)
}
}
现在我为 class 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.
}
是否可以将它存根到 Either
函数的 return Right(.....)?
由于 B 正在获取 a 的对象,因此您可以在 BTest class 中创建一个新的 A 对象,并覆盖方法验证为 return 任何您想要的一次 return 对( a) 并覆盖 Left 部分 return 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。我建议你覆盖验证方法和 return 你想要的任何东西。