Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m450:learningunits:lu03:pytest [2024/03/28 14:07] – angelegt - Externe Bearbeitung 127.0.0.1modul:m450:learningunits:lu03:pytest [2024/11/19 10:05] (aktuell) – [Resultate mit Fliesskommazahlen] msuter
Zeile 32: Zeile 32:
  
 ==== Unit Tests ==== ==== Unit Tests ====
 +
 Die einzelnen Unit Tests werden als Funktionen in Python programmiert. Die einzelnen Unit Tests werden als Funktionen in Python programmiert.
 Zum Beispiel: Zum Beispiel:
Zeile 47: Zeile 48:
 === Assert === === Assert ===
 Der Befehl ''assert'' ist eine spezielle Bedingung, die wir zum Testen und Debuggen von Code verwenden. Der Befehl ''assert'' ist eine spezielle Bedingung, die wir zum Testen und Debuggen von Code verwenden.
-Falls die Bedingung erfüllt ist, wird ''true'' zurück gegeben.+Falls die Bedingung erfüllt ist, wird nichts gemacht.
 Sonst wird eine ''AssertionError''-Exception geworfen. Sonst wird eine ''AssertionError''-Exception geworfen.
 Wir könnten das gleiche Resultat auch mit ''if''/''else'' erreichen: Wir könnten das gleiche Resultat auch mit ''if''/''else'' erreichen:
Zeile 54: Zeile 55:
 | <code python>assert result == 5040</code> | <code python> | <code python>assert result == 5040</code> | <code python>
 if result == 5040: if result == 5040:
-    return true+    pass
 else: else:
     raise AssertionError     raise AssertionError
 </code> | </code> |
  
-==== Beispiel ====+===== Beispiel =====
 Anhand dieses einfachen Beispiels siehst du, wie eine Python-Funktion getestet werden kann. Anhand dieses einfachen Beispiels siehst du, wie eine Python-Funktion getestet werden kann.
  
-=== factorial.py ===+==== factorial.py ====
 Dieses Modul enthält eine Funktion um die Fakultät einer Zahl zu berechnen. Dieses Modul enthält eine Funktion um die Fakultät einer Zahl zu berechnen.
  
Zeile 73: Zeile 74:
 </code> </code>
  
-=== test_factorial.py ===+==== test_factorial.py ====
 Dieses Modul enhält meine Unit Tests. Dieses Modul enhält meine Unit Tests.
 <code python> <code python>
Zeile 88: Zeile 89:
 </code> </code>
  
 +===== Resultate mit Fliesskommazahlen =====
 +Bei Berechnungen mit Fliesskommazahlen gibt es immer kleine Abweichungen bei den Resultaten.
 +Daher würde der Befehl ''assert'' häufig Fehler melden, obwohl das Resultat grundsätzlich korrekt ist.
 +
 +Um diesem Problem zu begegnen, gibt es die Funktion [[https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest-approx|pytest.approx()]].
 +Diese Funktion vergleicht die Werte unter Berücksichtigung einer geringen Toleranz.
 +Beim Aufruf der Funktion muss zwingend das erwartete Resultat mitgegeben werden.
 +Zusätzlich kennt die Funktion 3 optionale Argumente:
 +  * ''rel'': Erlaubte relative Abweichung. Default: 1/1'000'000
 +  * ''abs'': Erlaubte absolute Abweichung. Default: 1/1'000'000'000
 +  * ''nan_ok'': Soll ''Not a Number'' erlaubt sein. Default: False
 +
 +==== Beispiel ====
 +In diesem Beispiel testen wir eine Funktion, welche die Mehrwertsteuer (engl. **V**alue **A**dded **T**ax) berechnet.
 +Wir haben ein Total von CHF 1575.50 was gemäss Taschenrechner einer Steuer von CHF 127.6155 entspricht.
 +
 +<code python>
 +import pytest
 +
 +def calculate_vat(amount):
 +   return amount * 0.081
 +   
 +def test_calculate_vat():
 +    total = 1575.50
 +    vat = calculate_vat(total)
 +    pytest.approx(127.6155) == vat
 +    
 +</code>
  
 +Da ich hier keine Angaben für relative und absolute Abweichung gemacht habe, müsste das tatsächliche Ergebnis bis auf die zwölfte Nachkommastelle übereinstimmen.
 ===== Tutorials ===== ===== Tutorials =====
   * [[https://www.tutorialspoint.com/pytest/index.htm|Tutorialpoints]]   * [[https://www.tutorialspoint.com/pytest/index.htm|Tutorialpoints]]
  • modul/m450/learningunits/lu03/pytest.1711631267.txt.gz
  • Zuletzt geändert: 2024/03/28 14:07
  • von 127.0.0.1