为什么它应该"" {}类型检查scalatest?

时间:2016-02-09 21:05:47

标签: scala dsl scalatest

it should如何接受一个字符串,然后接受一个没有括号的函数:

import org.scalatest.FlatSpec
import scala.collection.mutable.Stack

class StackSpec extends FlatSpec {

  it should "pop values in last-in-first-out order" in {

  }

}

为什么不应该:

it(should("pop values in last-in-first-out order" in {

  }))

最近我允许类似编译是:

object st {

  class fs {

    def it(f: => Unit) = {

    }

    def should(s: String)(f: => Unit): Unit = {
      Unit
    }

    it(should("pop values in last-in-first-out order") {

    })

  }

}

2 个答案:

答案 0 :(得分:4)

调用对象函数的.和函数参数周围的()在scala中是可选的。所以诀窍是链中的返回对象实现了提供所需api的函数。简单的例子:

object InObj {

  def in(func : => Unit) = func
}

object ShouldObj {

  def should(x: String) = InObj
}

trait It {

  def it = ShouldObj
}

class MyClass extends It {

  val f = it should "Do something" in {

  }
}

答案 1 :(得分:2)

Scala对运算符和中缀方法名称如何转换为方法调用有一定的规则。

it should "foo" in {}

转换为

it.should("foo").in({})

如果您不使用"它"但是一些String从String到某个包装器的隐式转换有助于提供should-method。