Scala specs2辅助方法的返回类型
假设我编写了一个helper方法,它接受一些测试代码Scala specs2辅助方法的返回类型,scala,specs2,Scala,Specs2,假设我编写了一个helper方法,它接受一些测试代码 def testWithPrintln(test: => A):A = { println("I'm happy and testing") test } A类型应该是什么?什么是正确的?我正在浏览specs2api,有许多类似的类型:AsResult[\u],Result,MatchResult[\u],我不知道该用什么。我想你要找的是org.specs2.execute.Result。我相信这个简单的例子说明了你的
def testWithPrintln(test: => A):A = {
println("I'm happy and testing")
test
}
A
类型应该是什么?什么是正确的?我正在浏览specs2
api,有许多类似的类型:AsResult[\u]
,Result
,MatchResult[\u]
,我不知道该用什么。我想你要找的是org.specs2.execute.Result
。我相信这个简单的例子说明了你的目的:
import org.specs2.mutable.Specification
import org.specs2.execute.Result
class PrintTest extends Specification{
"A request to do something" should{
"succeed like this" in testWithPrintln{
"foo" mustEqual "foo"
}
"also succeed like this" in {
testWithPrintln{
"foo" mustEqual "foo"
}
}
}
def testWithPrintln(test: => Result) {
println("I'm happy and testing")
test
}
}
我相信AsResult
类型用于基本类型(如布尔)之间的隐式转换,这些类型本身不是Result
s,但可以转换为Result
。如果查看AsResult
的javadoc注释,它会指出:
Typeclass trait for anything that can be transformed to a Result
至于
MatchResult
,我相信在通过Mockito使用stubing对params之类的东西执行匹配时会用到它。在模拟存根中为参数定义自定义匹配器时,我已经明确使用了几次MatchResult
。试图详细说明@cmbaxter的答案
在规范2中,示例的主体需要作为结果进行评估,即成功
或失败
或错误
或跳过
或挂起
。为了提供足够的灵活性,示例
的主体将接受任何类型的T
,只要AsResult[T]
的实例在(隐式)范围内,就可以将其转换为结果
对于各种类型,存在AsResult
的实例:
Boolean
:这使得true
成为成功
,false
成为失败
Result
本身,仅返回值
MatchResult[T]
:一个MatchResult
是匹配器执行的结果。这是由于
像1这样的表达式必须是QUALTO(1)
org.scalacheck.Prop
在示例中执行scalacheck属性
在您的示例中,如果您按照以下方式实现测试帮助器,则测试帮助器可以正常工作:
// if `a: A` is acceptable as the body of an example
// you can use testWithPrintln(a) in your example
def testWithPrintln[A : AsResult](a: A): A = {
println(a)
a
}
但是请注意,您正在寻找的帮助器可能已经存在于specs2中。您可以使用.pp
方法“打印并传递”任何值:
// has type MatchResult[Int]
(1 must_== 1).pp
此外,您还可以为您的期望添加更多详细的消息:
// will print "this is not correct because 1 is not equal to 2"
"this is correct" ==> { 1 must_== 2 }
// will print "the number of elements: 1 is not greater than 2
val n = 1
n aka "the number of elements" must be_>(2)
与测试方法的返回类型相同,或者如果您不知道/不知道,您是否知道,结果与其他结果之间有什么区别?我还编辑了问题:返回类型以使其更清晰。