Hur gör man bra unittests i python?
Hur skulle ni säga att man gör bra unittests i python?
Enhetstester bör vara automatiserade så långt det är möjligt och tidseffektivt. En förutsättning för automatiserade enhetstester är att funktioner/metoder returnerar ett värde (eller flera). Man ska undvika att belamra sina funktioner/metoder med I/O, t ex anrop till input()
och print()
.
Man kan skriva enkla enhetstester med assert
. Men det är inte så mycket svårare att använda något ramverk för enhetstest, exempelvis unittest
. Har skrivit kortfattat om hur man kommer igång med unittest
på https://larslindehaven.wordpress.com/programmering/kvalitet/.
Testkoden bör ligga i egna moduler, separerad från produktionskoden, så att den inte stör läsbarheten eller riskerar att exekveras vid drift av produktionskoden. Att skriva testkoden innan produktionskoden kallas testdriven utveckling (TDD) vilket vissa anser vara bättre än det omvända.
Testkoden bör testa både "snällt" och "elakt". Snälla normalfall ska visa att produktionskoden ger korrekta resultat. Elaka felfall (patologiska fall) ska visa att produktionskoden är robust och ger rimliga resultat och/eller felmeddelanden. De är de sistnämnda fallen som många "glömmer" att testa och då levererar produktionskod med onödigt många fel.
Dessutom ska koden man vill testa vara bra strukturerad så att det faktiskt går att testa smådelar av den. Det är svårt att testa en smådel om den förutsätter att man kör hela programmet. Globala variabler kan vara en faktor här.
Lindehaven skrev:Enhetstester bör vara automatiserade så långt det är möjligt och tidseffektivt. En förutsättning för automatiserade enhetstester är att funktioner/metoder returnerar ett värde (eller flera). Man ska undvika att belamra sina funktioner/metoder med I/O, t ex anrop till
input()
ochprint()
.Man kan skriva enkla enhetstester med
assert
. Men det är inte så mycket svårare att använda något ramverk för enhetstest, exempelvisunittest
. Har skrivit kortfattat om hur man kommer igång medunittest
på https://larslindehaven.wordpress.com/programmering/kvalitet/.Testkoden bör ligga i egna moduler, separerad från produktionskoden, så att den inte stör läsbarheten eller riskerar att exekveras vid drift av produktionskoden. Att skriva testkoden innan produktionskoden kallas testdriven utveckling (TDD) vilket vissa anser vara bättre än det omvända.
Testkoden bör testa både "snällt" och "elakt". Snälla normalfall ska visa att produktionskoden ger korrekta resultat. Elaka felfall (patologiska fall) ska visa att produktionskoden är robust och ger rimliga resultat och/eller felmeddelanden. De är de sistnämnda fallen som många "glömmer" att testa och då levererar produktionskod med onödigt många fel.
när kallas main på? dvs hur gör man så att __name__ är '__main__'?
__name__ är "__main__" om du kör filen "som huvudfil", dvs som vanligt. Om filen istället körs genom att den importeras från nån annanstans, då är __name__ nåt annat. Så i if __name__ == '__main__'-blocket brukar man lägga kod som inte ska köras när filen blir importerad.