Skip to content

Commit 2029597

Browse files
authored
Update lessons on testing, modules, circular imports
pyvec#636
2 parents 29f101a + f9b83be commit 2029597

File tree

3 files changed

+37
-34
lines changed

3 files changed

+37
-34
lines changed

lessons/beginners/circular-imports/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ nepředvídatelně a tudíž nebezpečně.
7575
Jinými slovy: když se dva moduly importují navzájem,
7676
nemusí to fungovat podle očekávání.
7777

78-
Téhle situaci se budeme chtít vyvarovat.
78+
Téhle situaci se budeš chtít vyvarovat.
7979

80-
Jak na to? Máme dvě možnosti.
80+
Jak na to? Máš dvě možnosti.
8181

8282

8383
## Organizace modulů podle závislostí

lessons/beginners/modules/index.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ print(math.cos(math.pi))
4747
A teď to hlavní!
4848
Můžeš vytvořit vlastní importovatelný modul
4949
a to jen tak, že uděláš pythonní soubor.
50-
Funkce, které v něm nadefinuješ, a proměnné,
50+
Funkce, které v něm nadefinuješ, a globální proměnné,
5151
které v něm nastavíš, pak budou k dispozici tam, kde modul naimportuješ.
5252

5353
Zkus si to!
@@ -101,7 +101,8 @@ Zkus si to – na konci `louka.py` dopiš:
101101
print('Louka je zelená!')
102102
```
103103

104-
A pak spusť `python` (máš-li ho už spuštěný, ukonči a spusť znovu), a zadej:
104+
Spusť `python` (máš-li ho už spuštěný, ukonči a spusť znovu)
105+
a zadej v něm:
105106

106107
```pycon
107108
>>> print('První import:')
@@ -112,12 +113,14 @@ A pak spusť `python` (máš-li ho už spuštěný, ukonči a spusť znovu), a z
112113

113114
Výpis se objeví jen poprvé.
114115

115-
Když takhle modul při importu „něco dělá“ (něco vypíše na obrazovku,
116-
zapíše do souboru, na něco se zeptá uživatele atp.), říká se,
117-
že má *vedlejší efekt* (angl. *side effect*).
116+
Když takhle modul při importu „dělá“ něco víc, než jen nastavuje proměnné
117+
a funkce, říká se, že má *vedlejší efekt* (angl. *side effect*).
118+
Vedlejší efekt může být vypsání něčeho na obrazovku nebo do souboru,
119+
vykreslení okýnka na obrazovku, otázka na uživatele pomocí `input`, atp.
120+
118121
V modulech připravených na importování se vedlejším efektům vyhýbáme:
119122
úloha takového modulu je dát k dispozici *funkce*, které něco dělají,
120-
ne to udělat za nás.
123+
ne to udělat přímo.
121124
Všimni si například, že `import turtle` neukáže okýnko – to se objeví až po
122125
zavolání `turtle.forward()`.
123126

@@ -126,9 +129,7 @@ Příkaz `print` proto radši z modulu zase smaž.
126129

127130
## Adresář pro každý projekt
128131

129-
Od teď budeme občas psát větší projekty,
132+
Od teď budeš občas psát větší projekty,
130133
které budou obsahovat více souvisejících souborů.
131-
Je dobré pro každý takový projekt udělat
132-
zvláštní adresář.
133-
134-
(A to samozřejmě znamená i zvláštní gitový repozitář.)
134+
Pro každý takový projekt si udělej zvláštní adresář.
135+
Lépe se pak vyznáš v tom, ke kterému projektu který soubor patří.

lessons/beginners/testing/index.md

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Testování
22

33
Programátorská práce nespočívá jen v tom, program napsat.
4-
Důležité je si i ověřit, že opravdu funguje (a případně ho pak opravit).
5-
Ověřování, že program funguje, se říká *testování*.
4+
Důležité je si i ověřit, že opravdu funguje, a případně ho pak opravit.
5+
Ověřování, že program funguje, se říká *testování* (angl. *testing*).
66

77
Zatím jsi asi svoje programy testoval{{a}} tak, že jsi
88
je zkusil{{a}} spustit, něco zadal{{a}} a podíval{{a}} se,
@@ -11,16 +11,14 @@ U větších programů, které budou mít více a více
1111
možností, ale bude těžší a těžší takhle zkontrolovat,
1212
jestli všechny ty možnosti fungují, jak mají.
1313

14-
Proto si programátoři, místo aby program zkoušeli ručně, píšou jiné programy,
15-
které testují jejich výtvory za ně.
14+
Proto si programátoři často nezkouší programy „ručně“.
15+
Píšou jiné programy, které jejich výtvory testují za ně.
1616

1717
*Automatické testy* jsou funkce, které
18-
zkontrolují, že náš program funguje správně.
18+
zkontrolují, že program funguje správně.
1919
Spuštěním testů můžeš kdykoli ověřit, že kód funguje.
20-
Hlavní výhoda je, že když v otestovaném kódu
21-
v budoucnu uděláš nějakou změnu,
22-
testy ověří, že jsi nerozbil{{a}} nic, co dříve
23-
fungovalo.
20+
Když v otestovaném kódu v budoucnu uděláš nějakou změnu,
21+
testy ověří, že jsi nerozbil{{a}} nic, co dříve fungovalo.
2422

2523

2624
## Instalace knihovny pytest
@@ -46,11 +44,17 @@ Potom zadej následující příkaz.
4644
(Je to příkaz příkazové řádky, podobně jako
4745
`cd` nebo `mkdir`; nezadávej ho do Pythonu.)
4846

47+
> [warning] Opisuj opatrně!
48+
> Příkaz níže instaluje software z Internetu.
49+
> Za knihovnu `pytest` autoři tohoto kurzu ručí.
50+
> Jiné knihovny ale můžou dělat neplechu nebo být dokonce „zavirované“.
51+
> Dej si proto pozor a ve jménu `pytest` neudělej překlep!
52+
4953
```console
5054
(venv)$ python -m pip install pytest
5155
```
5256

53-
> [note] Co to znamená?
57+
> [note] Co ten příkaz znamená?
5458
> `python -m pip` zavolá Python s tím, že má pustit modul
5559
> `pip`. Tento modul umí instalovat nebo
5660
> odinstalovávat knihovny.
@@ -96,9 +100,8 @@ def test_secti():
96100

97101
Co se v té testovací funkci děje?
98102

99-
Příkaz `assert` vyhodnotí výraz za ním
100-
a pokud výsledek není pravdivý, vyvolá výjimku,
101-
která způsobí, že test selže.
103+
Příkaz `assert` vyhodnotí výraz za ním a pokud výsledek není pravdivý,
104+
vyvolá výjimku, která způsobí, že test selže.
102105
Můžeš si představit, že `assert a == b` dělá následující:
103106

104107
```python
@@ -108,8 +111,8 @@ if not (a == b):
108111

109112
> [note]
110113
> Zatím `assert` nepoužívej jinde než v testovacích funkcích.
111-
> V „normálním” kódu `assert` vlastnosti,
112-
> do kterých teď nebudeme zabředávat.
114+
> V „normálním” kódu se `assert` může chovat trochu jinak než výše,
115+
> ale do toho teď nebudeme zabředávat.
113116
114117

115118
## Spouštění testů
@@ -118,7 +121,7 @@ Testy se spouští zadáním příkazu
118121
`python -m pytest -v` následovaným názvem souboru s testy.
119122
Tedy v překladu: <strong>Python</strong>e, pusť
120123
<strong>m</strong>odul <strong>pytest</strong>,
121-
v „ukecaném” režimu (angl. <strong>v</strong>erbose) nad zadaným souborem.
124+
v „ukecaném” režimu (angl. <strong>v</strong>erbose) a se zadaným souborem.
122125

123126
```console
124127
$ python -m pytest -v test_secteni.py
@@ -144,10 +147,10 @@ najevo a přidá několik informací, které můžou
144147
usnadnit nalezení a opravu chyby.
145148

146149
> [note]
147-
> Argument s názvem souboru můžeme vynechat: `python -m pytest -v`
150+
> Argument s názvem souboru můžeš vynechat: `python -m pytest -v`.
148151
> V takovém případě `pytest` projde aktuální adresář a spustí testy
149152
> ze všech souborů, jejichž jméno začíná na `test_`. Místo souboru
150-
> lze též uvést adresář a `pytest` vyhledá testy v něm.
153+
> lze též uvést adresář: `pytest` vyhledá testy v něm.
151154
152155
Zkus si změnit funkci `secti` (nebo její test) a podívat se,
153156
jak to vypadá když test „neprojde“.
@@ -158,7 +161,7 @@ jak to vypadá když test „neprojde“.
158161
Testy se většinou nepíšou přímo ke kódu,
159162
ale do souboru vedle.
160163
Je to tak přehlednější a taky to pak zjednodušuje
161-
distribuci – předávání kódu někomu, kdo ho chce
164+
*distribuci*předání kódu někomu, kdo ho chce
162165
jen spustit a testy nepotřebuje.
163166

164167
Rozděl soubor s testem sečítání: funkci `secti` přesuň do modulu `secteni.py`,
@@ -173,7 +176,7 @@ Test by měl opět projít.
173176

174177
Automatické testy musí projít „bez dozoru“.
175178
V praxi se často automaticky spouští, případné chyby se automaticky
176-
oznamují (např. e-mailem) a fungující kód se automaticky
179+
oznamují (např. e-mailem) a fungující otestovaný kód se automaticky
177180
začne používat dál (nebo se rovnou vydá zákazníkům).
178181

179182
Co to znamená pro nás?
@@ -308,4 +311,3 @@ def test_tah_chyba():
308311
with pytest.raises(ValueError):
309312
piskvorky.tah_pocitace('oxoxoxoxoxoxoxoxoxox')
310313
```
311-

0 commit comments

Comments
 (0)