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.
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
- Mock everything: Gerçek code path test edilmez
- Snapshot blindly accept: Sonraki PR’da regresyon görmez
- Test isolation yok: Test A test B’yi etkiler
- Slow tests: 30 dk CI = developer’lar test yazmaz
- Coverage chase: %90 cov ama hiç assertion yok
- 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.
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.
Benzer Rehberler

AI ile Veri Analizi: Excel'den Python'a Kadar Pratik Rehber
ChatGPT Code Interpreter, Pandas, SQL, görselleştirme için AI. CSV analiz, dashboard, ML modelleri için pratik.

AI ile Refactoring: Legacy Kodu Modernleştirme
ChatGPT, Cursor, Copilot ile refactoring: legacy code, design pattern, technical debt çözme.

AI ile Mobil Uygulama Geliştirme: React Native, Flutter, Native
AI ile mobil geliştirme: React Native, Flutter, Swift, Kotlin. Copilot, Cursor, optimizasyon.