Če ga pravilno uporabite, je AI odličen pri enumeraciji dela testiranja — izmišlja robne primere in hitro piše boilerplate. Vendar pa morate preveriti, ali so asercije smiselne, ker bo AI rad pisal teste, ki so sprejeti, ne da bi kaj dokazali.
Če ga pravilno uporabite, je AI odličen pri enumeraciji dela testiranja — izmišlja robne primere in hitro piše boilerplate. Vendar pa morate preveriti, ali so asercije smiselne, ker bo AI rad pisal teste, ki so sprejeti, ne da bi kaj dokazali.
// Function under test, with its contract:
// applyDiscount(price, percent) -> price reduced by percent.
// Contract: percent must be 0..100; throws RangeError otherwise. price >= 0.
function applyDiscount(price, percent) {
if (percent < 0 || percent > 100) throw new RangeError('percent out of range');
return price - (price * percent) / 100;
}
// AI-suggested test cases (Jest) — note the edge and error paths, not just happy path:
test('applies a normal discount', () => {
expect(applyDiscount(100, 20)).toBe(80); // happy path
});
test('0% leaves price unchanged', () => {
expect(applyDiscount(100, 0)).toBe(100); // boundary: lower edge
});
test('100% makes it free', () => {
expect(applyDiscount(100, 100)).toBe(0); // boundary: upper edge
});
test('rejects percent above 100', () => {
expect(() => applyDiscount(100, 150)).toThrow(RangeError); // error path
});
AI je predlagal robne primere (0 in 100) in pot napak, ki bi jo morda pozabili. Vaša naloga je potrditi, da je toBe(80) pravilna pričakovana vrednost, ne le kar se funkcija naključno vrne.
Najtežji del testiranja ni tipkanje blokov test(...) — razmišljanje o primerih, ki bi jih sicer zgrešili, in AI je v tem res dober. Vendar pa nima pojma, kaj bi moral kod početi, razen če mu to poveste, zato se običajno zateka k pisanju testov, ki zrcalijo implementacijo (so sprejeti, vendar bi bili sprejeti tudi če bi bila funkcija napačna). Če AI obravnavate kot generator robnih primerov, vi pa ste lastnik asercij, boste imeli široko pokritost in resnično pravilnost — hitrost od AI, presojo od vas.