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:

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.

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