İçeriğe geç
Kodlama ve Yazılım Orta

AI ile Test Yazma: Unit, Integration, E2E için Otomatik Test Üretimi

Copilot, Cursor, ChatGPT ile unit test, integration, E2E test yazma. Jest, Vitest, Playwright örnekleri.

Paylaş:
Test kodu ekranı

Test yazımı = developer’ın en sevmediği iş. AI ile bu 15 dk → 2 dk indi. Coverage’ı 30’dan 85’e çıkarmak artık 1 günlük iş.

Unit Test

Function Test

Görev: Aşağıdaki fonksiyon için Vitest unit test:

[function yapıştır]

Test:
- Happy path
- Edge cases (null, undefined, empty string, negative)
- Error path
- Boundary values
- Type coercion

Coverage: ≥95%

Format: describe / it / expect

React Component Test

Görev: Aşağıdaki React component için React Testing Library + Vitest test:

[Component]

Test:
1. Render (initial state)
2. Props varyantları
3. User interactions (click, type, submit)
4. Async loading state
5. Error state
6. Accessibility (a11y query)

Pattern:
- screen.getByRole > getByText
- userEvent > fireEvent
- waitFor for async
- expect.toHaveBeenCalledWith

Hooks Test

Görev: Custom hook test (renderHook):

[hook]

Test:
- Initial value
- State updates
- Side effects (useEffect)
- Cleanup (unmount)
- Dependency change re-runs

Integration Test

API Test

Görev: Aşağıdaki Express route için integration test:

[route handler]

Test:
- 200 happy path
- 400 invalid input (3 variant)
- 401 unauthorized
- 403 forbidden
- 404 not found
- 500 server error
- DB transaction rollback (if applicable)

Setup:
- supertest
- test database (Docker)
- seed data
- cleanup after each

Mock yok: gerçek DB

Database Test

Görev: Prisma + PostgreSQL integration test:

[query/mutation]

Test:
- Insert (assert read)
- Update (assert change)
- Delete (assert removal)
- Unique constraint violation
- Foreign key cascade
- Transaction commit/rollback
- N+1 query detection

E2E Test (Playwright)

Görev: Aşağıdaki user flow için Playwright E2E:

Flow:
1. Login
2. Navigate to product page
3. Add to cart
4. Checkout
5. Payment (Stripe test mode)
6. Order confirmation

Test:
- Happy path
- Failed payment recovery
- Out-of-stock during checkout
- Session timeout

Best practices:
- page.locator('[data-testid="..."]') (data-testid prefer)
- await page.waitForLoadState
- expect(page).toHaveURL
- screenshot on failure
- Parallel safe (isolated)

Snapshot Test

Görev: Aşağıdaki component için snapshot:

[Component]

- Inline snapshot (small)
- File snapshot (büyük tree)
- Stable selector (CSS module hash hariç)
- Anti-flake: timestamp/random ID maskele

Test Coverage Artırma

Görev: Aşağıdaki dosya coverage %30. %85+'a çıkar:

[source code]
[mevcut testler]

Çıktı:
1. Eksik branchler (if/else, switch)
2. Test edilmemiş satırlar
3. Edge cases listesi
4. Ek 10 test (öncelik sırasıyla)
5. Refactor önerisi (testable hale getirme)

Mutation Testing

Görev: Stryker mutation testing setup:

Mevcut: Vitest + %90 coverage
Hedef: %75 mutation score

Çıktı:
- Stryker config
- En yüksek değer mutasyon listesi
- "Killed" olmayan mutasyonları gör → eksik test
- Top 5 kritik dosya öncelik

TDD Workflow

Senaryo: Yeni feature - kullanıcı şifre sıfırlama

TDD ile yaz:
1. Red: Failing test yaz (en küçük behavior)
2. Green: En basit code geçsin
3. Refactor

Her adımda kod + test üret. 5 adımda tamamla.

Test Doubles (Mock, Stub, Spy, Fake)

Detay: GitHub Copilot Rehberi

Görev: Service test - dependency'leri uygun double ile:

[Service code]

Her dependency için:
- DB → Fake (in-memory)
- Email → Spy (assert called)
- External API → Stub (fixed response)
- Time → Mock (date freeze)
- Logger → Silent (no test pollution)

Bug → Test (Regression)

Görev: Aşağıdaki bug için regression test:

Bug: [description]
Reproduce: [steps]
Beklenen: [...]
Olan: [...]

Test:
- Failing test (önce - reproduces bug)
- Fix (kod değişikliği)
- Pass test (after fix)
- Edge cases (benzer scenarios)

Performance Test

Görev: API endpoint performance test:

Endpoint: GET /api/products?page=1&limit=20

Test:
- Latency P95 < 200ms
- Throughput > 1000 req/s
- Memory leak (10 dk sürekli load)
- DB connection pool exhaustion
- Cache hit ratio > %80

Tool: k6 veya Artillery
Script + assertion + reporting

CI Entegrasyonu

# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: pnpm
      - run: pnpm install --frozen-lockfile
      - run: pnpm test --coverage
      - uses: codecov/codecov-action@v4

Detay: DevOps ile AI

Yaygın Hatalar

  1. Mock everything: Gerçek code path test edilmez
  2. Snapshot blindly accept: Sonraki PR’da regresyon görmez
  3. Test isolation yok: Test A test B’yi etkiler
  4. Slow tests: 30 dk CI = developer’lar test yazmaz
  5. Coverage chase: %90 cov ama hiç assertion yok
  6. AI’a komple devretmek: Üretilen test kontrol et

En İyi Pratikler

  • Test pyramid: çok unit + orta integration + az E2E
  • AAA pattern (Arrange / Act / Assert)
  • One assertion per test (mümkünse)
  • Descriptive name (“should return 404 when user not found”)
  • DRY ama clear (sometimes verbose > abstracted)

  • Test test eder (meta)
  • Şartlı assertion (if (x) expect(...))
  • Global state
  • Sleep / setTimeout (use waitFor)
  • Test data shared mutable

Sonraki Adımlar

Özet

AI test yazımında devrim. Unit %90, integration %70, E2E %50 otomatize. Coverage’ı 30→85’e çekmek 1 günlük iş. Anahtar: AI’ın önerdiği testi insan review et — edge case’leri sen yakalarsın.

Paylaş:

Yapay zeka dünyasından haberdar olun

Haftalık özet bültenimize abone olun, en yeni rehberler ve araç incelemeleri direkt e-postanıza gelsin.

İstediğiniz zaman abonelikten çıkabilirsiniz.