Link Search Menu Expand Document

Unit-Test

Definition

Programme können Fehler enthalten und diese möchte man entdecken bevor die Software ausgeliefert bzw. weitergegeben wird. Deswegen muss man eine Software testen. Die einfachsten und von der Entwicklerin normalerweise direkt mitproduzierten Tests bezeichnet man als Unit-Tests.

  • Ein Unit-Test testet eine kleine selbständige Einheit (Unit) der Software, z. B. eine Klasse, ein API, ein Modul
  • Der Test versucht die Unit möglichst isoliert zu testen
  • Unit Test werden häufig vom Entwickler selbst geschrieben
  • Unit Tests sind ein wichtiger Teil der Testgetriebenen Entwicklung
  • Für Python verwendet man das Modul unittest

Eine detaillierte Einführung in das Schreiben von Unit-Tests kann hier aus Zeitgründen nicht gegeben werden. In der Praxis gibt es eine ganze Reihe von Hilfsmitteln, um die zu testende Einheit zu isolieren und dann einzeln zu testen. Hierzu gehören Mocks, Stubs, Test Harness etc.

Die Testgetriebene Entwicklung (test-driven development) (TDD) ist eine Methode, die häufig bei der agilen Entwicklung von Computerprogrammen eingesetzt wird. Hier erstellt der Software-Entwickler die Tests grundsätzlich vor den zu testenden Komponenten.

Die Menge der Tests, die zusammengehören, nennt man Test-Suite.

Test-Case

Die Tests für ein Programm bestehen aus einer Reihe von Testfällen.

  • Ein Test besteht aus Testfällen (test case)
  • Ein Testfall
    • beantwortet eine einzelne Frage zum Code
    • sollte automatisch laufen (keine menschlichen Eingaben)
    • sollte selbst feststellen, ob er erfolgreich war
    • sollte unabhängig von den anderen Tests sein

Was sollte getestet werden?

  • Bekannte Werte
  • Randfälle
  • Falsche Eingabewerte
    • Zu lange Eingaben
    • Negative Werte
    • String statt Integer
    • Integer statt String

Assert

Es gibt eine Reihe von Assert-Funktionen, mit denen Ergebnisse getestet werden

  • assertEqual(a, b), assertNotEqual(a, b)
  • assertTrue(x), assertFalse(x)
  • assertIs(a, b), assertIsNot(a, b)
  • assertIsNone(x), assertIsNotNone(x)
  • assertIn(a, b), assertNotIn(a, b)
  • assertAlmostEqual(a, b), assertNotAlmostEqual(a, b)
  • assertGreater(a, b), assertLess(a, b)
  • assertItemsEqual(a, b)

Eine Zusicherung oder Assertion (lateinisch/englisch für Aussage, Behauptung) ist eine Aussage über den Zustand eines Computerprogramms. Mithilfe von Zusicherungen können logische Fehler im Programm erkannt und das Programm kontrolliert beendet werden. Des Weiteren können Assertions Informationen über den Grad der Testabdeckung während der Verifikation liefern. Quelle: Wikipedia

Beispiel

known_input.py
import unittest

from my_script import is_palindrome

class KnownInput(unittest.TestCase):
    knownValues = (('lego', False), ('radar', True))

    def testKnownValues(self):
        for word, palin in self.knownValues:
            result = is_palindrome(word)
            self.assertEqual(result, palin)
Ausführen der Tests
$ python3 -m unittest discover .
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK

Copyright © 2022 Thomas Smits