2016-06-17 15 views
7

Ich muss überprüfen, dass ein String viele Teilstrings enthält. Die folgenden ArbeitenString enthält viele Teilstrings in ScalaTest Matcher

string should include ("seven") 
string should include ("eight") 
string should include ("nine") 

, aber es dauert drei fast doppelte Zeilen. Ich bin auf der Suche nach so etwas wie

string should contain allOf ("seven", "eight", "nine") 

jedoch funktioniert das nicht ... Die Behauptung, nicht nur während Zeichenfolge diesen Teil sicher enthält.

Wie kann ich eine solche Assertion in einer Zeile durchführen?

Antwort

8

Try this:

string should (include("seven") and include("eight") and include("nine")) 
5

Sie immer eine benutzerdefinierte Matcher erstellen:

it should "..." in { 
    "str asd dsa ddsd" should includeAllOf ("r as", "asd", "dd") 
} 

def includeAllOf(expectedSubstrings: String*): Matcher[String] = 
    new Matcher[String] { 
    def apply(left: String): MatchResult = 
     MatchResult(expectedSubstrings forall left.contains, 
     s"""String "$left" did not include all of those substrings: ${expectedSubstrings.map(s => s""""$s"""").mkString(", ")}""", 
     s"""String "$left" contained all of those substrings: ${expectedSubstrings.map(s => s""""$s"""").mkString(", ")}""") 
    } 

http://www.scalatest.org/user_guide/using_matchers#usingCustomMatchers Details für mehr sehen.