Qual è lo scopo dei test xfail?

1

Alcuni framework di test, in particolare DejaGnu e py.test , hanno un flag / stato" XFAIL "per un test che dice che questo test dovrebbe fallire. Se il test ha esito positivo, è contrassegnato come "XPASS" (passaggio inatteso).

Non è solo una sovrapposizione ridondante? Sembra molto più semplice e comprensibile usare solo un asser che si aspetterebbe un errore - se l'errore si verifica, il test passa, se non lo fa, fallisce.

gcc in particolare sta avendo così tanti problemi con questo stato che rende l'output di test quasi inutile. Ero pronto a scrivere questa funzione come un'ennesima stranezza della storia - fino a quando l'ho visto in py.test .

Qual è lo scopo di questa funzione? Cosa può fare che SKIP e Assert non possano?

    
posta ivan_pozdeev 05.12.2018 - 14:50
fonte

1 risposta

1

Una suite di test dovrebbe sempre avere successo. Ma cosa succede se abbiamo test per funzionalità che non sono ancora state implementate, o test per bug noti che non possiamo correggere in questo momento?

Scriviamo un test xfail.

I test xfail codificano le nostre ipotesi. È soggetto al controllo del codice sorgente, deve comunque essere compilato e possiamo eseguirlo. Ciò impedisce alle nostre ipotesi di non essere più aggiornate con lo stato attuale del software. Ma durante il normale lavoro con la suite di test, questi test xfail non provocano il fallimento della suite di test. Questo è simile a un test saltato, tranne che quando un test saltato di solito viene eseguito e fallisce, ciò fallirebbe la suite di test completa. Il fallimento di un test xfail non ha esito negativo nella suite di test.

Nei test runner senza test xfail, dobbiamo invece fare affidamento sul numero di test superati o sulla percentuale di test superati. Ma questo è estremamente fragile. Innanzitutto, questi conteggi sono sbagliati se vengono aggiunti nuovi test, il che dovrebbe accadere in ogni momento. In secondo luogo, queste metriche accumulate non riescono a tenere conto del caso in cui un test inizia a passare ma un altro test inizia a non riuscire.

Al contrario, i test xfail assicurano che i test di passaggio continuino a passare e non nascondano regressioni accidentali. Funziona come un cricchetto: la nostra suite di test non può scivolare indietro e introdurre regressioni, ma può procedere in avanti rimuovendo l'annotazione xfail da un test non appena esso passa.

I test Xfail implementati in pytest sono diversi dai test che si prevede producano un errore. Il test xfail dovrebbe passare e ci si aspetta che passi in futuro, ma ci si aspetta che fallisca dato lo stato attuale del software. Al contrario, i test che si prevede producano un errore non riescono se non c'è un tale errore. Tali test di errore sono ad es. utile per affermare che la convalida dell'input ha esito positivo. La maggior parte dei framework di test ha annotazioni speciali per catturare un'eccezione prevista.

    
risposta data 05.12.2018 - 15:07
fonte

Leggi altre domande sui tag