Guide Testning

Testa AI-genererad kod

När du skriver kod själv testar du den delvis medan du skriver — du vandrar igenom gränsfallen för att kunna skriva raden. När koden genereras uteblir det steget. Testet är det som återställer balansen, och det är samtidigt den uppgift modellen är allra bäst på att hjälpa till med.

Senast granskad: 26 jul 2026

Del fem i serien. Testerna är det utfall som gör stegen i arbetsflödet verifierbara.

Kort sagt

AI-genererad kod behöver mer test, inte mindre. Inte för att den är sämre, utan för att ingen människa har resonerat sig fram till den. Testet är det enda som säger att koden gör rätt sak i ditt system — och det är också den uppgift modellen är allra bäst på att hjälpa till med.

Varför testbehovet ökar

När du skriver kod själv testar du den delvis medan du skriver. Du tänker igenom gränsfallen för att kunna skriva raden. Den mentala genomgången är osynlig men den är verklig kvalitetssäkring.

När koden genereras uteblir det steget. Du får ett färdigt resultat utan att ha vandrat igenom logiken. Koden kan vara bättre än den du själv skulle skrivit — men du har inte den förståelse du brukar ha när du trycker på merge.

Testet är det som återställer balansen. Det är dessutom det billigaste stället att lägga tiden, eftersom det är precis den sortens uppgift modellen är stark på: tydligt mönster, snabbt att verifiera.

Testet som skrivs först

Det finns ett arbetssätt som fungerar påfallande bra ihop med AI, och som är enklare än det låter: skriv testet innan du ber om implementationen.

Inte som ideologi, utan för att det löser ett konkret problem. Ett test skrivet i förväg är en exakt specifikation av vad du vill ha — mycket mer precis än en prompt i löptext. Och det ger dig ett utfall att verifiera mot som inte kommer från samma källa som koden.

1
Skriv testet själv, eller be om det och läs igenom det noga. Det här är stället där din uppmärksamhet gör mest nytta.
2
Kör det. Det ska falla. Ett test som går igenom innan koden finns testar ingenting.
3
Be om implementationen, med testet som del av prompten.
4
Kör igen. Nu betyder ett grönt test något.
Fällan

Be aldrig om testet och implementationen i samma prompt. Då skriver modellen ett test som passar den kod den tänkte skriva, och du har byggt ett slutet system som bekräftar sig självt. Det ser ut som täckning och är i praktiken en tautologi.

Vad modellen är bra på att testa

Styrkan ligger i uttömmande men tråkigt arbete — precis det människor hoppar över när det är sent på fredagen.

Be om det här

Genererade tester som inte testar något

Det finns ett återkommande mönster värt att känna igen: testet ser komplett ut, går igenom, och skulle fortsätta gå igenom även om koden var trasig.

Testet speglar koden
Kontrollerar att implementationen gör det den gör, inte att den gör rätt. Byt beteendet med flit — faller testet inte, testar det ingenting.
Allt är mockat
Varje beroende är utbytt, så testet verifierar bara att funktionen anropar sina mockar i rätt ordning. Verklig integration är otestad.
Bara det lyckade fallet
Tre tester för att det fungerar, noll för vad som händer när det inte gör det. Felvägarna är där buggarna bor.
Kontroller utan innehåll
assert result != null och liknande. Sant nästan alltid, informativt nästan aldrig.

Ett snabbt sätt att kontrollera: ändra implementationen så att den blir fel, med flit. Om inget test faller vet du att täckningen är kosmetisk. Det tar en minut och är den enda kontrollen som faktiskt mäter något.

Täckning som ljuger

Kodtäckning mäter vilka rader som kördes, inte om något kontrollerades. Ett testsvit som anropar all kod och inte påstår något om resultatet ger utmärkt täckning och noll trygghet.

Det blir extra vilseledande med genererade tester, eftersom de är snabba att producera i mängd. Nittio procents täckning som uppstått på tio minuter betyder något annat än nittio procent som vuxit fram under ett halvår.

Använd täckning för att hitta det som är helt otestat — där är den användbar. Använd den inte som mått på kvalitet.

En praktisk miniminivå

Om det ska vara en enda regel: testa huvudflödet och felvägarna för allt som rör användarkonton, pengar eller data som inte går att återskapa. Resten kan vara pragmatiskt.

Ett test per felväg i kod som hanterar behörighet. Att fel användare nekas är viktigare än att rätt användare släpps in — det senare upptäcks direkt, det förra kanske aldrig.
Ett test som körs på riktigt mot en riktig databas eller ett riktigt API, för de viktigaste flödena. Mockar döljer exakt de fel som kostar mest.
Ett regressionstest per bugg du faktiskt haft. Det är den billigaste testsviten som finns, eftersom den bara innehåller fel som bevisligen kan uppstå.
Kör testerna innan du ber om nästa steg. Ett grönt test mellan varje ändring är det som gör små diffar värdefulla — utan det vet du inte vilket steg som gick sönder.

Tester säger att koden gör rätt. Nästa guide handlar om en fråga tester inte svarar på: vad som får lämna huset.

Nästa guide
Säkerhet och känsliga data