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.