===== Teszt vezérelt fejlesztés =====
Hozzunk létre egy könyvtárat és lépjünk bele:
mkdir tdd
cd tdd
Hozzunk létre egy virtuális környezetet:
python -m virtualenv .venv
Ha nincs telepítve a //virtualenv// csomag akkor futtassuk:
pip install virtualenv
Lépjünk be a virtualis környezetbe:
.\.venv\Scripts\activate
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:
def test_always_passes():
assert True
def test_always_fails():
assert False
Majd futtassuk a tesztet:
python -m pytest tests
Hozzunk létre egy másik teszt fájlt, test_fixture.py:
import pytest
@pytest.fixture
def example_fixture():
return 1
def test_with_fixture(example_fixture):
assert example_fixture == 1
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:
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",
]
A data_formatter.py-ben megírjuk az implementációt:
def format_data_for_display(people):
return [f"{person['given_name']} {person['family_name']}: {person['title']}" for person in people]
Futtassuk a tesztet:
python -m pytest tests