Treffen vom 10.12.2019

Agenda

Programm

Wir haben uns TDD development (mit pytest) angeschaut.

Hier das Test file mit dem Namen 'test_uebung_TDD.py':

   1 from uebung_TDD import *
   2 # Mit * werden alle Namen aus dem Module importiert - diese Variante ist  mit Vorsicht zu genießen: https://docs.python.org/3/tutorial/modules.html#more-on-modules
   3 
   4 def test_multiplikation():
   5     assert multiplikation(2,3) == 6
   6 
   7 def test_search_element_returns_false_if_element_not_found():
   8     assert search_element(['adi', 'marion', 'thomas',
   9     'markus', 'andreas', 'thomas'], 'bernd') == False
  10 
  11 def test_search_element_returns_true_if_element_found():
  12     assert search_element(['adi', 'marion', 'thomas',
  13     'markus', 'andreas', 'thomas'], 'adi') == True
  14 
  15 def test_search_element_returns_false_if_None():
  16     assert search_element(['adi', 'marion', 'thomas',
  17     'markus', 'andreas', 'thomas'], None) == False
  18 
  19 def test_search_element_returns_two():
  20     assert search_element(['adi', 'marion', 'thomas',
  21     'markus', 'andreas', 'thomas'], 'thomas') == 2

Anmerkungen: Zunächst wurde eine einfache Multiplikationfunktion getestet und geschrieben.

Dann haben wir eine Funktion getestet und geschrieben, die eine Liste nach einem Element durchsucht - wir wollen die 'Nadel im Heuhaufen' finden. Verschiedene wichtige und spezielle Fälle wurden getestet. Führe 'pytest -v' aus, damit du Informationen über jeden Test bekommst.

Nach der Testfunktion für die Multiplikation wurde die eigentliche Funktion geschrieben: Hier das File mit dem Namen 'uebung_TDD.py':

   1 def multiplikation(a, b):
   2     return a*b
   3 
   4 def search_element(heuhaufen, nadel):
   5     count = 0
   6     for name_in_liste in heuhaufen:
   7         if nadel == name_in_liste:
   8             count += 1
   9     return count
  10 
  11 def search_element(heuhaufen, nadel):
  12     return heuhaufen.count(nadel)
  13 
  14 def search_element(heuhaufen, nadel):
  15     found = [name_in_liste
  16              for name_in_liste in heuhaufen
  17              if nadel == name_in_liste]
  18     return len(found)

Erstellung der Funktion, mit der eine Liste nach einem Element durchsucht wird:

3 Versionen haben wir uns angesehen:

  1. Variable count
  2. list method 'count' https://docs.python.org/3/tutorial/datastructures.html

  3. List comprehension https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

Hinweis: bei der list comprehension-Funktion wird eine Zahl zurückgegeben anstatt False oder True. Die anderen Tests passen weiterhin ('test passed'), weil sich False im numerischen Kontext wie 0 verhält und True wie 1.

Weiters haben wir gesprochen über den programmiertechnischen Ausdruck 'magic' http://www.catb.org/~esr/jargon/html/M/magic.html

TDD ist eine unter verschiedenen anderen Testarten: mit Pytest können auch andere Tests durchgeführt werden.


CategoryShownotes

PyUGAT: Treffen/2019-12-Studygroup (last edited 2019-12-12 16:00:08 by Adi)