Esiste un modo per scrivere qualcosa come un "unit test" che si assicura che il codice non sia non compilare?Come si scrive un test di scala unità che garantisce l'interruzione della complicazione?
Perché dovrei volere una cosa del genere? Due ragioni.
1) Controllare la sicurezza del tipo della mia API. Mi piacerebbe un modo per essere sicuro che se qualcuno passa in cattivo valore, si ottiene un errore del compilatore, non solo un errore di runtime. Ovviamente, posso solo eseguire il compilatore e controllare l'errore, ma averlo formalizzato in un test di unità è buono per evitare una regressione & anche per la documentazione.
Ad esempio, considerare questo test. V'è un certo codice commentato che avevo utilizzato per controllare tipo di sicurezza: https://github.com/squito/boxwood/blob/master/core/src/test/scala/com/quantifind/boxwood/EnumUnionTest.scala#L42 (linee 42 & 48 - sulla linea 34 che chiamo un'API diversa che ha un'eccezione runtime, che posso controllare)
Si in realtà mi ci è voluto un po 'per ottenere la sicurezza del tipo giusto, quindi quelli erano controlli importanti. Ora se vado a modificare l'implementazione sottostante, non posso semplicemente eseguire la mia suite di test - Devo anche ricordare di decommentare quelle righe e verificare un errore del compilatore.
2) Verifica gestione errori di macro. Se una macro ha qualche input negativo, dovrebbe dare luogo a un errore del compilatore. Stessi problemi qui, lo stesso desiderio di averlo in una suite di test facile da eseguire.
Uso ScalaTest, ma sono felice di avere una soluzione con qualsiasi framework di test delle unità.
La soluzione ovvia cioè per scrivere un test di unità che esegue il compilatore su una risorsa che si specifica che unit test e per analizzare l'uscita della compilazione. Visualizzandolo in questo modo il codice sorgente non è il test dell'unità stesso, ma solo una risorsa per eseguire un test unitario. – SpaceTrucker
possibile duplicato di [Verifica di un'affermazione secondo cui qualcosa non deve essere compilato] (http://stackoverflow.com/questions/15125457/testing-an-assertion-that-qualcosa-molto-noncompile) –
Vedi [la mia domanda precedente] (http://stackoverflow.com/q/15125457/334519), [risposta di Miles Sabin] (http://stackoverflow.com/a/15132961/334519) e la nuova macro ['illTyped' in Shapeless 2.0] (https://github.com/milessabin/shapeless/blob/49ef0311cadb648653c3749ae057127fe1f265d6/core/src/main/scala/shapeless/test/typechecking.scala). –