2012-09-20 19 views
6

Come posso verificare se uno Seq[String] è vuoto o non usa specs2 in Scala? Sto usando seq must be empty o seq.length must be greaterThan(0) ma finisco sempre con errori di disallineamento di tipo.Seq test vuoto con specifiche2

ret is Seq[String] 

ret.length must be greaterThan(0) 

[error] ApiTest.scala:99: type mismatch; 
[error] found : Int 
[error] required: org.specs2.matcher.Matcher[String] 
[error]   ret.length must be greaterThan(0) 
+0

Si potrebbe essere più fortunato se hai postato il codice esatto e il messaggio di errore corrispondente, come indicato dal compilatore. –

+0

Sì, per favore aggiungi un esempio più completo. Penso che il tuo caso potrebbe essere un'istanza di un problema di inferenza di tipo "classico" in cui hai espressioni di matcher consecutive separate da newline, come "ret.length deve essere maggioreThan (0) \ n ret.lenght deve essereLasciaThan (10)" (se questo è il caso, modifico questo commento come risposta corretta) – Eric

risposta

1

Provare a utilizzare lo specs2 matcher have size. Poiché la dimensione non può essere negativa, se non è zero, deve essere maggiore di zero. Pertanto, potremmo utilizzare:

ret must not have size (0) 
5

Penso che l'errore di mancata corrispondenza del tipo sia causato da un altro bit di codice rispetto a quello che hai postato.

Il vostro esempio dovrebbe funzionare con:

ret must not be empty 

ho provato e confermato di essere al lavoro in modo corretto:

"Seq beEmpty test" should { 
    "just work" in { 
     Seq("foo") must not be empty 
    } 
    } 

si potrebbe incorrere in problemi se si utilizzano più affermazioni per test, per esempio il seguente non compila:

"Seq beEmpty test" should { 
    "just work" in { 
    List() must be empty 
    Seq("foo") must not be empty 
    } 
} 

Quale è inaspettato, ma facilmente risolto da aiutare il compilatore:

"Seq beEmpty test" should { 
    "just work" in { 
    List() must beEmpty 
    Seq("foo") must not beEmpty 
    } 
} 
+0

Qualsiasi motivo per non utilizzare 'beEmpty' di default? – OrangeDog

+0

@OrangeDog solo l'eleganza di 'be empty' su 'beEmpty' può essere un argomento. Sono semanticamente uguali. – iwein