【问题标题】:Specs2 and @Before/@After-like methodsSpecs2 和 @Before/@After 类方法
【发布时间】:2013-01-13 09:14:30
【问题描述】:

给出如下代码:

class RESTAcceptanceTest extends Specification {

  override def is = anonymous ^ signinOAuth

  def anonymous = "Something"       ^ givenSomething ^
                  "must happen"     ^ mustHappen 
  end

  def signinOAuth = "Signin"                ^ givenSignin ^
                    "works as expected"     ^ userExistsInDatabase 
  end

  // rest of object definitions

}

如何确保在代码执行之前和之后相同/ 在“匿名”“signinOAuth”之后,并且“after”方法应该 即使测试本身失败也要执行吗?

【问题讨论】:

    标签: scala specs2


    【解决方案1】:

    如果您使用 Given/When/Then 步骤,您可以使用 Context 来控制每个示例之前和之后执行的内容:

    import org.specs2._
    import specification._
    
    class MySpec extends Specification { def is = 
      "anonymous" ^ 
        "something" ^ something ^
        "must happen" ^ mustHappen ^ endp^
      "OAuth"^ 
        "signing" ^ signing ^
        "works ok" ^ worksOk
    
      lazy val something: Given[Int] = (s: String) => { s.pp; 1 } 
      lazy val mustHappen: Then[Int] = (i: Int) => (s: String)  => 
        context { s.pp; i must_== 1       }
    
      lazy val signing:  Given[Int] = (s: String) => { s.pp; 2 }
      lazy val worksOk: Then[Int] = (i: Int) => (s: String) => 
        context { s.pp; i must_== 2 }
    
      lazy val context = new BeforeAfter {
       def  before = "before".pp
       def after = "after".pp
      }
    }
    

    在上面的代码中,context 对象的apply 方法用于包装代码以使用beforeafter 执行。此外,如果您向其中一个示例添加错误,您将看到始终执行“之后”代码。

    PS:pp 是一个类似于println 的实用方法,用于在执行期间在终端中显示某些内容。与 println 相比的优势在于它返回其参数,因此您可以编写 1.pp must_== 1

    【讨论】:

    • 谢谢!我几乎喜欢这样做,但没有找到如何处理上下文。我希望用这个例子更新 Specs2 用户指南。
    • 我已经更新了文档,但也启用了 BeforeExampleAfterExample、... 带有 Given/When/Then 步骤的特征(在 Scala 2.9 的 1.12.4-SNAPSHOT 中。 Scala 2.10 的 2 和 1.13.1-SNAPSHOT)。请参阅文档:etorreborre.github.com/specs2/guide-SNAPSHOT/guide/…
    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多