5 svar
174 visningar
Dualitetsförhållandet 1287
Postad: 2 mar 2021 21:30

Hur gör man bra unittests i python?

Hur skulle ni säga att man gör bra unittests i python?

Lindehaven 820 – Lärare
Postad: 2 mar 2021 23:54

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 unittesthttps://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.

Laguna 28443
Postad: 3 mar 2021 07:53

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.

Dualitetsförhållandet 1287
Postad: 3 mar 2021 11:17 Redigerad: 3 mar 2021 11:17
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() 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 unittesthttps://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__'?

Skaft 2373 – F.d. Moderator
Postad: 3 mar 2021 11:43

__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.

Laguna 28443
Postad: 3 mar 2021 13:05

https://docs.python.org/3/library/__main__.html?highlight=__name__

Svara Avbryt
Close