2016-06-17 12 views
7

Devo verificare che una stringa contenga molte sottostringhe. I seguenti lavoriLa stringa include molte sottostringhe in ScalaTest Matchers

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

ma ci vogliono tre righe quasi duplicate. Sto cercando qualcosa di simile

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

tuttavia questo non funziona ... L'asserzione solo fallisce mentre stringa contiene queste stringhe di sicuro.

Come posso eseguire tale affermazione in una riga?

risposta

8

Prova questo:

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

si può sempre creare un matcher personalizzato:

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(", ")}""") 
    } 

Vedere http://www.scalatest.org/user_guide/using_matchers#usingCustomMatchers per maggiori dettagli.

Problemi correlati