Learning
Clean Code

Tesztelhetőség és tiszta kód

Tesztelhetőségre tervezett kód, FIRST elvek és dependency injection.

Tesztelhetőség és tiszta kód

A tesztelhetőség és a tiszta kód szimbiózisban él egymással: a tisztán megírt kód könnyebben tesztelhető, a tesztelhetőségre tervezett kód általában tisztább lesz.

A FIRST elvek

A jó unit tesztek FIRST tulajdonságokkal rendelkeznek:

  • Fast – gyorsan futnak
  • Independent – nem függnek egymástól
  • Repeatable – mindig ugyanazt az eredményt adják
  • Self-validating – automatikusan eldöntik, sikeres-e a teszt
  • Timely – ideálisan a kóddal együtt, vagy előtte íródnak (TDD)

Tesztelhetőségre tervezett kód

// ❌ Rossz – a függvény nehezen tesztelhető, mert függ a globális állapottól
let discount = 0;

function applyDiscount(price) {
  return price - (price * discount);
}
// ✅ Javított – pure function, könnyen tesztelhető
function applyDiscount(price, discountRate) {
  return price - (price * discountRate);
}

// Teszt:
test('applyDiscount reduces price by given rate', () => {
  expect(applyDiscount(100, 0.1)).toBe(90);
  expect(applyDiscount(200, 0.5)).toBe(100);
});

Dependency Injection a tesztelhetőségért

// ❌ Rossz – a függvény hardcoded függőséggel rendelkezik
function sendOrderConfirmation(order) {
  const emailService = new EmailService(); // nem injektált!
  emailService.send(order.email, 'Confirmed', order.summary);
}
// ✅ Javított – a függőség kívülről jön, mockolható teszteknél
function sendOrderConfirmation(order, emailService) {
  emailService.send(order.email, 'Confirmed', order.summary);
}

// Tesztben:
const mockEmailService = { send: jest.fn() };
sendOrderConfirmation(mockOrder, mockEmailService);
expect(mockEmailService.send).toHaveBeenCalled();

Refaktorálás és tesztek kapcsolata

A refaktorálás – a kód belső szerkezetének javítása a viselkedés megváltoztatása nélkül – csak akkor biztonságos, ha megfelelő tesztlefedettség áll rendelkezésre. Tesztek nélküli refaktorálás egyensúlyjárás a mélység felett.

Rövid összefoglaló

  • A tiszta kód és a tesztelhetőség kéz a kézben járnak – egy jól megírt kód könnyebben tesztelhető.
  • Dependency injection segítségével a függőségek kicserélhetők tesztelés során.
  • Refaktorálj csak tesztek megléte esetén – a tesztek biztonsági hálód.

On this page