Genereer geautomatiseerde unit tests met CodeWhisperer voor mijn code
description
Stelt ontwikkelaars in staat snel uitgebreide unit tests te maken, verhoogt de betrouwbaarheid van code en vermindert de handmatige inspanning voor het schrijven van tests. Deze prompt maakt gebruik van de mogelijkheden van CodeWhisperer om relevante testgevallen te genereren, inclusief randgevallen en foutscenario's die vaak over het hoofd worden gezien. Het bespaart tijd, bevordert best practices voor testen en verbetert de algehele softwarekwaliteit.
prompt
Gebruik Amazon CodeWhisperer om geautomatiseerde unit tests te genereren voor het volgende codefragment of module: <voer je codefragment of mo ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van geautomatiseerde unit tests voor de functie `berekenTotaal`, inclusief diverse testgevallen en randgevallen:
```javascript
// Importeren van een testframework zoals Jest
// npm install jest --save-dev
// De functie die getest wordt
function berekenTotaal(artikelen) {
return artikelen.reduce((totaal, artikel) => totaal + artikel.prijs, 0);
}
// Testcases
describe('berekenTotaal', () => {
test('som van prijzen bij meerdere artikelen', () => {
const artikelen = [
{ naam: 'Boek', prijs: 15.99 },
{ naam: 'Pen', prijs: 1.49 },
{ naam: 'Map', prijs: 7.50 }
];
expect(berekenTotaal(artikelen)).toBeCloseTo(24.98);
});
test('lege array geeft 0 terug', () => {
expect(berekenTotaal([])).toBe(0);
});
test('artikel zonder prijs wordt genegeerd of geeft fout', () => {
const artikelen = [
{ naam: 'Muis', prijs: 10 },
{ naam: 'Toetsenbord' } // ontbreekt prijs
];
// Afhankelijk van de implementatie kan dit een fout veroorzaken
// of de ontbrekende prijs wordt als undefined gezien en leidt tot NaN
// Hier testen we dat het resultaat NaN is tenzij er checks zijn
expect(berekenTotaal(artikelen)).toBeNaN();
});
test('negatieve prijzen worden correct opgeteld', () => {
const artikelen = [
{ naam: 'Korting', prijs: -5 },
{ naam: 'Item', prijs: 20 }
];
expect(berekenTotaal(artikelen)).toBe(15);
});
test('artikel met niet-numerieke prijs geeft NaN', () => {
const artikelen = [
{ naam: 'Artikel', prijs: 'twintig' }
];
expect(berekenTotaal(artikelen)).toBeNaN();
});
test('null of undefined input geeft error', () => {
expect(() => berekenTotaal(null)).toThrow();
expect(() => berekenTotaal(undefined)).toThrow();
});
});
```
**Opmerking:** De bovenstaande tests gaan ervan uit dat de functie niet omgaat met null of undefined inputs en dat ontbrekende of niet-numerieke prijzen tot NaN leiden. Voor robuuste code zou je extra checks kunnen toevoegen binnen de functie zelf.
provider: deepseek
model: deepseek-chat
Hier is een geautomatiseerde unit test voor jouw `berekenTotaal` functie met verschillende testscenario's:
```javascript
const berekenTotaal = require('./jouwBestand'); // Pas pad aan
describe('berekenTotaal', () => {
// Typische scenario's
test('berekent totaal voor normale artikelenlijst', () => {
const artikelen = [
{ prijs: 10 },
{ prijs: 20 },
{ prijs: 15 }
];
expect(berekenTotaal(artikelen)).toBe(45);
});
test('berekent totaal voor enkele artikel', () => {
const artikelen = [{ prijs: 25 }];
expect(berekenTotaal(artikelen)).toBe(25);
});
test('berekent totaal voor artikelen met decimale prijzen', () => {
const artikelen = [
{ prijs: 10.50 },
{ prijs: 20.25 },
{ prijs: 15.75 }
];
expect(berekenTotaal(artikelen)).toBeCloseTo(46.50);
});
// Randgevallen
test('retourneert 0 voor lege array', () => {
const artikelen = [];
expect(berekenTotaal(artikelen)).toBe(0);
});
test('berekent totaal voor artikelen met prijs 0', () => {
const artikelen = [
{ prijs: 0 },
{ prijs: 10 },
{ prijs: 0 }
];
expect(berekenTotaal(artikelen)).toBe(10);
});
test('kan omgaan met grote getallen', () => {
const artikelen = [
{ prijs: 1000000 },
{ prijs: 2000000 }
];
expect(berekenTotaal(artikelen)).toBe(3000000);
});
// Foutafhandeling
test('gooit fout bij undefined input', () => {
expect(() => berekenTotaal(undefined)).toThrow();
});
test('gooit fout bij null input', () => {
expect(() => berekenTotaal(null)).toThrow();
});
test('gooit fout bij niet-array input', () => {
expect(() => berekenTotaal('string')).toThrow();
expect(() => berekenTotaal(123)).toThrow();
expect(() => berekenTotaal({})).toThrow();
});
test('gooit fout bij artikelen zonder prijs eigenschap', () => {
const artikelen = [
{ prijs: 10 },
{ naam: 'artikel zonder prijs' }, // Geen prijs eigenschap
{ prijs: 20 }
];
expect(() => berekenTotaal(artikelen)).toThrow();
});
test('gooit fout bij niet-numerieke prijzen', () => {
const artikelen = [
{ prijs: 10 },
{ prijs: 'twintig' }, // String in plaats van number
{ prijs: 20 }
];
expect(() => berekenTotaal(artikelen)).toThrow();
});
});
```
**Aanvullende verbeteringen voor de originele functie:**
Overweeg deze robuustere versie van je functie:
```javascript
function berekenTotaal(artikelen) {
if (!Array.isArray(artikelen)) {
throw new Error('Artikelen moet een array zijn');
}
return artikelen.reduce((totaal, artikel) => {
if (typeof artikel.prijs !== 'number' || isNaN(artikel.prijs)) {
throw new Error('Artikel prijs moet een geldig nummer zijn');
}
return totaal + artikel.prijs;
}, 0);
}
```
**Test framework afhankelijkheden:**
Deze tests gebruiken Jest, maar je kunt ze aanpassen voor elk test framework dat je gebruikt (Mocha, Jasmine, etc.).