2010-02-10 13 views

risposta

99

stopifnot()

Si può anche essere interessati a pacchetti come Runit e testthat per unit testing.

+0

C'è un modo per controllare il messaggio di errore che viene segnalato se stopifnot() si arresta? – Nick

+10

@Nick, no. Usa 'stopifnot()' per i test di validità, per verificare che il codice stia facendo quello che dovrebbe fare, ma 'if (blahdiblah) si ferma (" messaggio di errore ")' per test di input, per verificare che l'input per il programma sia valido. Solo quest'ultimo dovrebbe mai accadere durante il normale utilizzo. – Harlan

+4

Vedere anche il nuovo pacchetto 'assertthat' di Hadley, che fornisce risposte migliori di quelle di" stopifnot': https://github.com/hadley/assertthat – Harlan

11

@ Nick:

È possibile controllare il messaggio di errore se si scrive una funzione con un nome descrittivo per testare la condizione che genera un errore nel programma. Ecco un esempio:

Less_Than_8 = function(x) return(x < 8) 

for (i in 1:10) 
{ 
    print(i) 
    stopifnot(Less_Than_8(i)) 
} 

Questo stamperà i numeri da 1 a 8, quindi stampare un messaggio che dice

Error: Less_Than_8(i) is not TRUE 

Sarebbe bello se la "i" tra parentesi è stato sostituito con il valore che fallito il test, ma ottieni quello per cui paghi.

Se hai bisogno di qualcosa di più bello di quello, guarda in Runit e prova quello che Harlan ha suggerito.

+0

Puoi anche inserire la definizione della funzione all'interno di 'stopifnot()'. – naught101

+1

nullo101, il punto di avere il test in una funzione denominata è quello di ottenere il nome del test stampato nel messaggio di errore – Matthew

Problemi correlati