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
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)
$ python3 -m unittest discover .
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK