specs2 - 如何在测试本身周围和内部使用相同的变量?

specs2 - how to use the same variable inside around and inside the test itself?

我正在使用 specs2 作为我的测试框架。 我想生成一个在测试本身中可用的 uniq 密钥。

def around[R: AsResult](r: => R): Result = {
   val uniqueToken = before()
   try AsResult(r)(uniqueToken)
   finally after(uniqueToken)
}

"foo" should {
   "bar" in {
     do something with uniqueToken
   }
}

找不到任何好的方法.. 有什么想法吗?

你应该从这个伪代码中得到一般的想法:

class Around[R: AsResult](r: => R) {
   val uniqueToken = before()

   try AsResult(r)(uniqueToken)
   finally after(uniqueToken)
}

"foo" should {
   "bar" in new Around(r) {
     do something with uniqueToken
   }
}

你可以这样写

class MySpec extends Specification with ForEach[Token] {
  "foo" should {
     "do something" in { token: Token =>
        ok
     }
  }

  def foreach[R : AsResult](f: Token => R): Result = {
    val token = createToken

    try AsResult(f(token))
    finally cleanup(token)
  }
}

这已记录在案 here