Scala specs2辅助方法的返回类型

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。我相信这个简单的例子说明了你的

假设我编写了一个helper方法,它接受一些测试代码

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)

与测试方法的返回类型相同,或者如果您不知道/不知道,您是否知道,
结果与其他结果之间有什么区别?我还编辑了问题:返回类型以使其更清晰。