2013-02-20 4 views
7

Angenommen, ich eine specs2 Spezifikation in der „Einheit“ Stil definiert haben, wie folgt:Wie kann ich ein "sollte" Block/Fragment in specs2 überspringen?

import org.specs2.mutable 

class MyClassSpec extends mutable.Specification { 
    "myMethod" should { 
    "return positive values" in { 
     MyClass.myMethod must beGreaterThan(0) 
    } 

    "return values less than 100" in { 
     MyClass.myMethod must beLessThan(100) 
    } 
    } 
} 

Gibt es eine einfache Art und Weise/disable/Markierung alle Beispiele innerhalb der überspringen sollte myMethod Block/Fragment anhängig?

Offensichtlich kann ich pendingUntilFixed aufrufen oder pending von jedem einzelnen Beispiel im Block zurückgeben, aber das wäre ziemlich mühsam für einen Block mit vielen Spezifikationen.

Es scheint, dass dies ein häufiges Vorkommen wäre, wenn MyClass.myMethod schwierig zu implementieren ist und gestempelt wird. Gibt es eine andere Möglichkeit, dass dies üblicherweise in Specs2 getan wird?

Antwort

7

Sie können in der Tags Merkmal mischen und definieren jede section Sie wollen:

import org.specs2.mutable._ 

class MyClassSpec extends Specification with Tags { 

    section("pending") 
    "myMethod" should { 
    "return positive values" in { 
     MyClass.myMethod must beGreaterThan(0) 
    } 

    "return values less than 100" in { 
     MyClass.myMethod must beLessThan(100) 
    } 
    } 
    section("pending") 
} 

Dann führen Sie Ihre Spezifikation mit exclude pending

>test-only *MyClassSpec* -- exclude pending 

Diese here dokumentiert.

Sie können auch einen impliziten Kontext verwenden, um sicherzustellen, dass alle Beispiele im should Block sind PendingUntilFixed:

import org.specs2._ 
import execute._ 

class MyClassSpec extends mutable.Specification { 
    "this doesn't work for now" >> { 
    implicit val puf = pendingContext("FIXME") 
    "ex1" in ko 
    "ex2" in ok 
    } 
    "but this works ok" >> { 
    "ex3" in ko // maybe not here ;-) 
    "ex4" in ok 
    } 

    def pendingContext(reason: String) = new mutable.Around { 
    def around[T <% Result](t: =>T) = 
     t.pendingUntilFixed(reason) 
    } 
} 

Update für specs2 3.x

import org.specs2._ 
import execute._ 

class TestMutableSpec extends mutable.Specification { 
    "this doesn't work for now" >> { 
    implicit def context[T] = pendingContext[T]("FIXME") 

    "ex1" in ko 
    "ex2" in ok 
    } 
    "but this works ok" >> { 
    "ex3" in ko // maybe not here ;-) 
    "ex4" in ok 
    } 

    def pendingContext[T](reason: String): AsResult[MatchResult[T]] =  
    new AsResult[MatchResult[T]] { 
     def asResult(t: =>MatchResult[T]): Result = 
     AsResult(t).pendingUntilFixed(reason) 
    } 
} 
+0

Sicher, das wird gehen. Vielen Dank! – Kevinoid

+0

Ich nehme an, dass es keine Möglichkeit gibt, die Fragmente in der Ausgabe als ausstehend erscheinen zu lassen? Wenn sie ausgeschlossen werden, werden sie etwas schwieriger zu merken (zumindest für mich). – Kevinoid

+0

Ich habe die Antwort mit dem, was Sie wahrscheinlich sind, aktualisiert. – Eric

Verwandte Themen