2015-09-08 9 views
7

Sto eseguendo alcuni test con ScalaTest che si basano sulle connessioni ai server di test per essere presenti. Io attualmente creato il mio Spec simile a questo:Come ignorare/saltare i test a livello di programmazione con ScalaTest?

abstract class ServerDependingSpec extends FlatSpec with Matchers { 

    def serverIsAvailable: Boolean = { 
    // Check if the server is available 
    } 
} 

E 'possibile ignorare (ma non fallire) test quando questo metodo restituisce false?

Attualmente lo faccio in un modo "hacker":

"Something" should "do something" in { 
    if(serverIsAvailable) { 
    // my test code 
    } 
} 

ma voglio qualcosa di simile

whenServerAvailable "Something" should "do something" in { 
    // test code 
} 

o

"Something" should "do something" whenServerAvailable { 
    // test code 
} 

penso che dovrei definire la mia tag personalizzato , ma posso solo fare riferimento al codice sorgente di in o ignore e non capisco come inserire le mie implementazioni personalizzate.

Come devo fare?

risposta

8

È possibile utilizzare Tag per raggiungere questo obiettivo:

documentazione su come utilizzare i tag: http://www.scalatest.org/user_guide/tagging_your_tests

Aggiunta e rimozione di test contrassegnati con i parametri della riga di comando: http://www.scalatest.org/user_guide/using_the_runner#specifyingTagsToIncludeAndExclude

Esempio Codice:

import org.scalatest.Tag 

object ServerIsAvailable extends Tag("biz.neumann.ServerIsAvailable") 

"Something" should "do something" taggedAs(ServerIsAvailable) in { 
    // your test here 
} 

L'esecuzione dei test è un problema. Funziona solo per il test Solo e testQuick non test. Nell'esempio testOnly è l'abbreviazione di testOnly *

sbt "testOnly -- -l biz.neumann.ServerAvailable" 
+0

Ho trovato anche questo, ma la documentazione si riferisce solo come farlo sulla riga di comando. Tuttavia, sto eseguendo 'sbt test' su Jenkins e voglio saltare a livello di programmazione il test quando il server non è disponibile. – rabejens

+0

quindi il programma dovrebbe reagire quando il server è disponibile o si desidera configurare Jenkins per dedurre se il server è disponibile e quindi si deve adattare Jenkins per eseguire i test di conseguenza? –

+0

Oh, ora capisco.Attualmente avvio e chiudo il server di test a livello di codice (è fatto con Docker su un server di test di SSHing), ma usare Jenkins per questo è la soluzione più pulita. – rabejens

11

userei cancel:

"Something" should "do something" in { 
    if(!serverIsAvailable) { 
    cancel 
    } 

    // my test code 
} 

o semplificare ancora di più utilizzando assume:

"Something" should "do something" in { 
    assume(serverIsAvailable) 

    // my test code 
} 
+1

Si ipotizzi anche questo: 'assume (server.isAvailable)' –

+0

Nice, ho modificato la soluzione per mostrare un esempio completo. –

+0

dovrebbe essere senza! Ho provato a modificarlo ma purtroppo le modifiche devono essere di almeno 6 caratteri. –

2

Ecco qualche trucco per saltare un test basato su una truffa dizione:

object WhenServerAvailable extends Tag(if (serverIsAvailable) "" else classOf[Ignore].getName) 

"Something" should "do something" taggedAs WhenServerAvailable in { ... } 
Problemi correlati