A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
tanszek:oktatas:informacios_rendszerek_integralasa:tdd_pelda [2024/02/25 21:46] knehez |
tanszek:oktatas:informacios_rendszerek_integralasa:tdd_pelda [2024/02/25 22:32] (aktuális) knehez [Teszt írása] |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | === Teszt vezérelt fejlesztés === | + | ===== Teszt vezérelt fejlesztés ===== |
- | Klónozzuk a teszt projektet: | + | Hozzunk létre egy könyvtárat és lépjünk bele: |
- | + | mkdir tdd | |
- | git clone https://github.com/knehez/tdd.git | + | cd tdd |
Hozzunk létre egy virtuális környezetet: | Hozzunk létre egy virtuális környezetet: | ||
python -m virtualenv .venv | python -m virtualenv .venv | ||
- | Ha nincs telepítve a //virtualenv// csomag akkor futtasuk: | + | Ha nincs telepítve a //virtualenv// csomag akkor futtassuk: |
pip install virtualenv | pip install virtualenv | ||
Lépjünk be a virtualis környezetbe: | Lépjünk be a virtualis környezetbe: | ||
.\.venv\Scripts\activate | .\.venv\Scripts\activate | ||
A prompt előtt innentől kezdve (.venv) szöveg íródik ki. | A prompt előtt innentől kezdve (.venv) szöveg íródik ki. | ||
+ | Telepítsük a //pytest// csomagot: | ||
+ | pip install pytest | ||
+ | A teszt indítása: | ||
+ | python -m pytest tests | ||
+ | Minden könyvtárban keresi a test_*.py és a *_test.py fájlokat, ezeket tekinti teszteknek. | ||
+ | ===== Teszt írása ====== | ||
+ | |||
+ | hozzunk létre egy //test_basic.py// fájlt a teszt könyvtárban a következő tartalommal: | ||
+ | |||
+ | <sxh python> | ||
+ | def test_always_passes(): | ||
+ | assert True | ||
+ | |||
+ | def test_always_fails(): | ||
+ | assert False | ||
+ | </sxh> | ||
+ | |||
+ | Majd futtassuk a tesztet: | ||
+ | python -m pytest tests | ||
+ | |||
+ | Hozzunk létre egy másik teszt fájlt, test_fixture.py: | ||
+ | |||
+ | <sxh python> | ||
+ | import pytest | ||
+ | |||
+ | @pytest.fixture | ||
+ | def example_fixture(): | ||
+ | return 1 | ||
+ | |||
+ | def test_with_fixture(example_fixture): | ||
+ | assert example_fixture == 1 | ||
+ | </sxh> | ||
+ | |||
+ | A teszt futtatása után az alábbi eredményt kapjuk: | ||
+ | |||
+ | {{:tanszek:oktatas:informacios_rendszerek_integralasa:pasted:20240225-220731.png}} | ||
+ | |||
+ | Javítsuk ki a tesztet és gihub repositoryba töltsük fel. | ||
+ | |||
+ | Hozzunk létre egy app alkönyvtárat a gyökérben és üres //__init__.py// fájlt és egy //data_formatter.py// fájlt, a //tests/test_data_formatter.py//. | ||
+ | |||
+ | {{:tanszek:oktatas:informacios_rendszerek_integralasa:pasted:20240225-222912.png}} | ||
+ | |||
+ | A test_data_formatter.py tartalma legyen: | ||
+ | |||
+ | <sxh python> | ||
+ | from app.data_formatter import format_data_for_display | ||
+ | def test_format_data_for_display(): | ||
+ | people = [ | ||
+ | { | ||
+ | "given_name": "Karoly", | ||
+ | "family_name": "Nehez", | ||
+ | "title": "Senior Software Engineer", | ||
+ | }, | ||
+ | { | ||
+ | "given_name": "John", | ||
+ | "family_name": "Smith", | ||
+ | "title": "Project Manager", | ||
+ | }, | ||
+ | ] | ||
+ | |||
+ | assert format_data_for_display(people) == [ | ||
+ | "Karoly Nehez: Senior Software Engineer", | ||
+ | "John Smith: Project Manager", | ||
+ | ] | ||
+ | </sxh> | ||
+ | |||
+ | A data_formatter.py-ben megírjuk az implementációt: | ||
+ | <sxh python> | ||
+ | def format_data_for_display(people): | ||
+ | return [f"{person['given_name']} {person['family_name']}: {person['title']}" for person in people] | ||
+ | </sxh> | ||
+ | |||
+ | Futtassuk a tesztet: | ||
+ | python -m pytest tests |