2011-08-17 16 views
5

Come per il titolo, mi chiedo se è possibile fornire "assunzioni" a Scalatest quando si definisce un particolare caso di test. I presupposti in questo contesto sarebbero precondizioni per un test, in modo tale che se l'assunto fosse valutato come falso, il test sarebbe saltato anziché eseguito (e gestito di conseguenza dai corridori).Scalatest ha qualche supporto per le ipotesi?

In questo caso particolare, sto pensando di dipendenze tra i test - quindi ci potrebbe essere un test di base che convalida se un metodo restituisce nulla, seguito da test successivi che forare la specificità della risposta. Se il primo test fallisce, preferirei che quest'ultimo test fosse contrassegnato come "non eseguibile" in qualche modo, piuttosto che fallire.

Detto questo posso immaginare di utilizzare questo in futuro per definire alcune precondizioni non connesse (come il disco rigido deve avere almeno 20 MB di spazio libero), quindi se c'è un modo generale di skippin un test in fase di esecuzione (al contrario di usando ignore o pending) Preferirei sentirlo.

La sintassi specializzata è la benvenuta, anche se è necessario eseguire manualmente un certo tipo di eccezione.

+0

Come si desidera che il test sia riferito? Come ignorato, in sospeso, successo, fallimento? –

+0

Anche questo mi piacerebbe. Il caso d'uso sta compilando un database con materiale di prova; se ciò fallisce, i test (non tutti) che verrebbero letti dal database non dovrebbero essere eseguiti. Preferirei riportarli come "ignorati". – akauppi

risposta

5

ScalaTest 2.0 (credo) ha aggiunto il supporto per le assunzioni:

Trait asserzioni fornisce anche metodi che consentono di annullare un test. Si annullerebbe un test se una risorsa richiesta dal test non fosse disponibile. Ad esempio, se un test richiede che un database esterno sia online e non lo è, il test potrebbe essere annullato per indicare che non è stato possibile eseguire a causa del database mancante. Tale test assume una banca dati è disponibile, ed è possibile utilizzare il metodo di assumere per indicare questo, all'inizio del test, in questo modo:

assume(database.isAvailable) 

http://www.scalatest.org/user_guide/using_assertions

+0

imho, questa dovrebbe essere la risposta corretta – akauppi

+0

@akauppi Sono d'accordo. Quindi ora lo è. :) –

1

ScalaCheck, che viene spesso utilizzato in combinazione con ScalaTest, può farlo:

import org.scalacheck._ 

object XSpecifictaion extends Properties ("X") { 

    property ("sample (a - b)") = Prop.forAll { (a: Int, b: Int) => 
     (a < b || (a - b >= 0)) } 
} 

! (un < b) è la tua ipotesi, e (a - b> = 0) il vero test; si esegue solo quest'ultimo, se l'ipotesi è vera, quindi si nega la propria ipotesi e si combina con una scorciatoia-OR.

Problemi correlati