Unit-Tests

Grundlagen der Softwareentwicklung in Python

Adam Spannbauer

Machine Learning Engineer at Eastman

Warum testen?

  • Bestätige, dass der Code wie beabsichtigt funktioniert
  • Stelle sicher, dass Änderungen in einer Funktion keine andere brechen
  • Schütze vor Änderungen in einer Abhängigkeit
Grundlagen der Softwareentwicklung in Python

Testen in Python

  • doctest
  • pytest

pytest-Logo

Grundlagen der Softwareentwicklung in Python

doctest verwenden

def square(x):
    """Quadriere die Zahl x

    :param x: Zahl zum Quadrieren
    :return: x quadriert

    >>> square(3)
    9
    """
    return x ** 3


import doctest doctest.testmod()
Fehlgeschlagenes Beispiel:
    square(3)
Erwartet:
    9
Bekommen:
    27
Grundlagen der Softwareentwicklung in Python

pytest-Struktur

Teststruktur

Grundlagen der Softwareentwicklung in Python

pytest-Struktur

Teststruktur

Grundlagen der Softwareentwicklung in Python

Unit-Tests schreiben

arbeiten in workdir/tests/test_document.py

from text_analyzer import Document


# Teste tokens-Attribut auf Document-Objekt
def test_document_tokens():
    doc = Document('a e i o u')

    assert doc.tokens == ['a', 'e', 'i', 'o', 'u']

# Teste Randfall eines leeren Dokuments def test_document_empty(): doc = Document('') assert doc.tokens == [] assert doc.word_counts == Counter()
Grundlagen der Softwareentwicklung in Python

Unit-Tests schreiben

# Erstelle 2 identische Document-Objekte
doc_a = Document('a e i o u')
doc_b = Document('a e i o u')

# Prüfe, ob Objekte == sind
print(doc_a == doc_b)

# Prüfe, ob Attribute == sind print(doc_a.tokens == doc_b.tokens) print(doc_a.word_counts == doc_b.word_counts)
False

True True
Grundlagen der Softwareentwicklung in Python

pytest ausführen

arbeiten mit Terminal

datacamp@server:~/work_dir $ pytest
2 Elemente gesammelt

tests/test_document.py ..                     [100%]

========== 2 bestanden in 0,61 Sekunden ==========
Grundlagen der Softwareentwicklung in Python

pytest ausführen

arbeiten mit Terminal

datacamp@server:~/work_dir $ pytest tests/test_document.py
2 Elemente gesammelt

tests/test_document.py ..                     [100%]

========== 2 bestanden in 0,61 Sekunden ==========
Grundlagen der Softwareentwicklung in Python

Fehlgeschlagene Tests

arbeiten mit Terminal

datacamp@server:~/work_dir $ pytest
2 Elemente gesammelt

tests/test_document.py F.

============== FEHLER ==============
________ test_document_tokens ________

def test_document_tokens(): doc = Document('a e i o u')

assert doc.tokens == ['a', 'e', 'i', 'o']
E AssertionError: assert ['a', 'e', 'i', 'o', 'u'] == ['a', 'e', 'i', 'o']
E Linke Seite enthält mehr Elemente, erstes zusätzliches Element: 'u'
E Verwende -v, um den vollständigen Unterschied zu sehen

tests/test_document.py:7: AssertionError
====== 1 fehlgeschlagen in 0,57 Sekunden ======
Grundlagen der Softwareentwicklung in Python

Lass uns üben!

Grundlagen der Softwareentwicklung in Python

Preparing Video For Download...