Přeskočit na hlavní obsah
PraktickAI
KurzyPro týmySlužbyDokumentaceBlog
KurzyPro týmySlužbyDokumentaceBlog
DomůKurzyAI pro QA a testováníGenerování testů s AI
Předchozí lekceDalší lekce
Lekce 2 z 730 min

Generování testů s AI

Přejít na sekci
  • Anatomie dobrého AI-generovaného testu
  • Prompt vzory pro unit testy
  • Pattern 1: Behavior-driven prompt
  • Pattern 2: Test-first prompt
  • Pattern 3: Existing code + coverage gap
  • Generování integračních testů
  • Coverage analýza s AI
  • Review AI-generovaných testů

Anatomie dobrého AI-generovaného testu

AI může generovat testy rychle, ale ne všechny AI-generované testy jsou dobré. Dobrý test má jasný účel, testuje jednu věc, má srozumitelný název a je udržovatelný. V této lekci se naučíte prompt vzory, které vedou ke kvalitním testům.

Nejčastější chyba při AI generování testů: nechat AI generovat testy bez kontextu. AI pak píše testy, které testují implementaci (mockují všechno) místo chování. Vždy poskytněte kontext — co je účel funkce, ne jak je implementována.

Prompt vzory pro unit testy

Pattern 1: Behavior-driven prompt

Místo 'napiš testy pro tuto funkci' popište chování, které chcete otestovat:

# Špatný prompt
"Napiš testy pro funkci calculate_discount()"

# Dobrý prompt
"Napiš testy pro calculate_discount(). Funkce:
- Vrací 0% slevu pro objednávky pod 1000 Kč
- Vrací 5% slevu pro objednávky 1000–4999 Kč
- Vrací 10% slevu pro objednávky 5000+ Kč
- Vrací 15% slevu pro VIP zákazníky bez ohledu na částku
- Raises ValueError pro záporné částky

Testuj každý boundary case a kombinace VIP + částka.
Použij pytest, bez mocků."

Pattern 2: Test-first prompt

Nechte AI napsat testy PŘED tím, než napíše implementaci. Toto je TDD s AI:

# Prompt: "Napiš pytest testy pro funkci parse_csv_row(),
# která bere CSV řádek jako string a vrací dict.
# Očekávané chování:
# - Standardní řádek: 'Jan,Novak,30' -> {'first': 'Jan', 'last': 'Novak', 'age': 30}
# - Prázdné pole: 'Jan,,30' -> {'first': 'Jan', 'last': '', 'age': 30}
# - Quotes: '"Jan, Jr.",Novak,30' -> {'first': 'Jan, Jr.', 'last': 'Novak', 'age': 30}
# - Prázdný string: raises ValueError
# - Špatný počet polí: raises ValueError"

# AI vygeneruje:
import pytest
from myapp.parsers import parse_csv_row


def test_standard_row():
    result = parse_csv_row("Jan,Novak,30")
    assert result == {"first": "Jan", "last": "Novak", "age": 30}


def test_empty_field():
    result = parse_csv_row("Jan,,30")
    assert result == {"first": "Jan", "last": "", "age": 30}


def test_quoted_field_with_comma():
    result = parse_csv_row('"Jan, Jr.",Novak,30')
    assert result == {"first": "Jan, Jr.", "last": "Novak", "age": 30}


def test_empty_string_raises():
    with pytest.raises(ValueError):
        parse_csv_row("")


def test_wrong_field_count_raises():
    with pytest.raises(ValueError):
        parse_csv_row("Jan,Novak")

Pattern 3: Existing code + coverage gap

Dejte AI existující kód A existující testy a požádejte o doplnění coverage:

"Tady je implementace [vložit kód] a tady jsou existující testy
[vložit testy]. Coverage report ukazuje, že řádky 45–67
nejsou pokryty. Napiš testy, které pokryjou tyto řádky.
Zaměř se na error handling a edge cases."

Generování integračních testů

Integrační testy jsou složitější než unit testy — testují interakci mezi komponentami. Pro AI je klíčové poskytnout kontext o všech zúčastněných komponentách:

# Prompt pro integrační test:
# "Napiš integrační test pro endpoint POST /api/payments/create/.
# Endpoint očekává JWT autentizaci, payload s course_slug,
# vytvoří Payment v DB a vrátí redirect URL.
# Použij pytest + Django test client. Reálná DB, žádné mocky
# kromě externího Comgate API (použij respx)."

# AI vygeneruje:
import pytest
import respx
from httpx import Response


@pytest.mark.django_db
def test_create_payment_success(authenticated_client, course):
    with respx.mock:
        respx.post("https://payments.comgate.cz/v1.0/create").mock(
            return_value=Response(200, json={
                "code": 0,
                "transId": "ABC-123",
                "redirect": "https://payments.comgate.cz/pay/ABC-123"
            })
        )

        response = authenticated_client.post(
            "/api/payments/create/",
            data={"course_slug": course.slug},
            content_type="application/json",
        )

    assert response.status_code == 200
    data = response.json()
    assert "redirect_url" in data
    assert Payment.objects.filter(user=authenticated_client.user).exists()

Coverage analýza s AI

AI může pomoci nejen psát testy, ale i analyzovat coverage a navrhovat, kde přidat testy:

# 1. Vygenerujte coverage report
pytest --cov=myapp --cov-report=json

# 2. Nechte AI analyzovat coverage gaps
claude "Analyzuj coverage report v coverage.json.
  Identifikuj 5 nejdůležitějších nepokrytých oblastí
  a napiš testy pro ně. Prioritizuj podle:
  1. Business-kritické funkce
  2. Error handling cesty
  3. Edge cases v datové validaci"

Review AI-generovaných testů

Každý AI-generovaný test musíte reviewovat. Hledejte tyto problémy:

  • Tautologické testy — test, který testuje, že implementace dělá to, co dělá (assert result == function(input))
  • Nadměrné mockování — test, který mockuje všechno a netestuje nic reálného
  • Chybějící assertions — test, který projde vždy, protože nemá assert na správném místě
  • Hard-coded hodnoty — test, který projde jen pro konkrétní data a selhává při změně
  • Chybějící cleanup — test, který zanechává stav (soubory, DB záznamy) a ovlivňuje další testy

Pravidlo palce: pokud nerozumíte, co test testuje, do 5 sekund od přečtení, test je špatný. AI často píše testy s nejasným názvem. Přepište název testu tak, aby popisoval očekávané chování, ne implementační detail.

Vygenerujte testy pro váš kód

Vyberte jeden modul ve vašem projektu, který nemá dostatečné testy: 1. Spusťte coverage report a identifikujte nepokryté řádky 2. Použijte AI (Claude Code, Copilot, nebo Cursor) k vygenerování testů 3. Použijte všechny tři prompt vzory: behavior-driven, test-first, coverage gap 4. Reviewujte každý generovaný test podle checklistu výše 5. Spusťte testy a ověřte, že prochází a zvedají coverage Porovnejte kvalitu testů z různých prompt vzorů. Který vzor produkoval nejlepší testy?

Nápověda

Začněte s jednoduchou utility funkcí — čistý vstup, čistý výstup, žádné side effecty. Tam AI exceluje. Pak zkuste složitější funkci s databází nebo API voláním. Uvidíte, kde AI začíná potřebovat víc kontextu.

Klíčové poznatky
  • Behavior-driven prompty produkují lepší testy než generické 'napiš testy pro X'
  • Poskytněte AI kontext o očekávaném chování, ne jen o implementaci
  • Vždy reviewujte AI-generované testy — hledejte tautologie, nadměrné mocky a chybějící asserty
  • TDD s AI: nechte AI napsat testy před implementací
  • Coverage gap analýza: dejte AI coverage report a nechte ho doplnit chybějící testy

V příští lekci se podíváme na vizuální regresní testování — jak s AI odhalit layout shifty a rozbitý responsive design. Odemkněte celý kurz a pokračujte.

Předchozí lekce
LinkedInX / Twitter

2/7 hotovo — pokračujte!

  • Anatomie dobrého AI-generovaného testu
  • Prompt vzory pro unit testy
  • Pattern 1: Behavior-driven prompt
  • Pattern 2: Test-first prompt
  • Pattern 3: Existing code + coverage gap
  • Generování integračních testů
  • Coverage analýza s AI
  • Review AI-generovaných testů

PraktickAI

AI školení a konzultace pro technické týmy

KurzyPro týmySlužbyDokumentaceBlog
karel@praktickai.appLinkedIn

© 2026 PraktickAI — SkyVisual s.r.o. Všechna práva vyhrazena. Ochrana soukromí · Obchodní podmínky · Reklamační řád