2014-04-02 18 views
11

Qual è il modo proposto di eseguire i test su scala macro?Come testare i macro Scala?

Mi rendo conto che occorrono due progetti a causa della necessità di una compilazione separata. Questo passaggio, se necessario, è accettabile e in gran parte chiaro.

Ma come si afferma che un'espansione di macro non riesce quando dovrebbe? Senza alcune funzioni speciali, il test case non verrà compilato e pertanto l'intero progetto di test non verrà compilato.

penso che questo assert richiederebbe un'altra macro della forma

errors(code: => _): List[CompileError] 

che restituisce gli errori di compilazione della macro interiore. Lo stesso sarebbe necessario per verificare che gli avvertimenti si verifichino se lo fossero e così via ...

Esistono alcuni strumenti di prova per macro Scala?

+4

+1. Vedi anche [questa domanda sui test per la non compilazione in Scala] (http://stackoverflow.com/q/15125457/334519) e [questa sulla documentazione dei macro Scala] (http://stackoverflow.com/q/13840784/334.519). –

+0

La precedente domanda ha risposte promettenti. Grazie per il puntatore! –

risposta

2

È possibile utilizzare assertDoesNotCompile da ScalaTest. Ecco un esempio di utilizzo di questo per testare coontrollore dei tipo Scala:

import org.scalatest.FunSuite 

class TypeTest extends FunSuite { 
    test("String vals can't hold ints") { 
    assertDoesNotCompile("val x: String = 1") 
    } 
} 

È possibile passare una stringa contenente un esempio di quando la vostra espansione macro non dovesse assertDoesNotCompile. Si noti che esiste anche lo assertCompiles, se ne senti la necessità.

Problemi correlati