如何在Scala测试中返回正确的值
我有一个方法返回[Exception,String]如何在Scala测试中返回正确的值,scala,scalatest,stub,either,scalamock,Scala,Scalatest,Stub,Either,Scalamock,我有一个方法返回[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 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.
}
是否可以通过这种方式存根它以返回
或函数的右(…)?当B获取a的对象时,您可以在BTest类中创建a的新对象,并重写方法validate以在返回右(a)后返回您想要的任何内容,并覆盖左部分返回左(a)
或者你可以这样做。如建议的那样
(a.validate _).expects(param).returning(Right("a"))
这在给定的场景中可以很好地工作,但是如果您执行类似mockObject.something的操作,那么它将为您提供NullPointerException。我建议您重写validate方法并返回您想要的内容。为什么要使用Any
?这只是一个示例。它可以是任何东西。你不能只说(a.validate u2;).expects(param).returning(Right(“a”)
?你可以不使用mock[a]just do val r=new a(a:Any){override validate(a:Any)return Right(a)}就可以使用它来断言值。即使是一个例子,也不建议使用Any
(a.validate _).expects(param).returning(Right("a"))