Treffen vom 10.12.2019
Agenda
- Begrüßung
- Metalab
- Vorstellungsrunde
Wiki, MailingLists, Twitter, Meetup, IRC: #pyugat on freenode, Flattr
Am Wiki anmelden & persönliche Seite anlegen (Kontaktinfos, Name, Interessen, Foto,…)
Mögliche Themen in FutureTalks eintragen
- Nächsten Termin festlegen
- Events
- Buchbesprechungen?
- Zeiteinteilung für den Abend festlegen
- Wer hat Kurzvorträge mitgebracht?
- Groben Zeitplan für Hauptvortrag festlegen
Programm
- Haupt-Aktivität: Test driven Development
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:
- Variable count
list method 'count' https://docs.python.org/3/tutorial/datastructures.html
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.