Ontwerp en implementeer unit tests voor mijn code
description
Met deze prompt krijg ik gerichte ondersteuning bij het opzetten van unit tests die mijn code robuuster maken. Het helpt me om randgevallen te herkennen en te testen, waardoor bugs sneller worden gevonden en de kwaliteit van mijn software verbetert. Dit is beter dan generieke testadviezen doordat het direct is toegespitst op mijn eigen code.
prompt
Help me bij het ontwerpen van unit tests voor de volgende code: <code>. Geef voorbeeld ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je unit tests kunt ontwerpen voor de functie `berekenBTW`, inclusief voorbeeldtestgevallen en uitleg over het identificeren van edge cases.
**1. Basis testgevallen**
- **Normale waarden**: Test met een standaard bedrag, bijvoorbeeld 100.
```js
test('berekenBTW van 100 moet 21 zijn', () => {
expect(berekenBTW(100)).toBe(21);
});
```
- **Gelijk aan 0**: Wat gebeurt als het bedrag 0 is?
```js
test('berekenBTW van 0 moet 0 zijn', () => {
expect(berekenBTW(0)).toBe(0);
});
```
- **Negatief bedrag**: Dit moet een fout genereren.
```js
test('negatief bedrag moet fout geven', () => {
expect(() => berekenBTW(-50)).toThrow('Bedrag mag niet negatief zijn');
});
```
**2. Edge cases**
- **Heel kleine positieve waarde** (bijvoorbeeld 0.01): test of de functie correct werkt bij minimale positieve invoer.
```js
test('berekenBTW van 0.01 moet 0.0021 zijn', () => {
expect(berekenBTW(0.01)).toBeCloseTo(0.0021);
});
```
- **Heel grote waarde** (bijvoorbeeld 1.000.000): test of de functie ook bij grote getallen correct werkt.
```js
test('berekenBTW van 1.000.000 moet 210.000 zijn', () => {
expect(berekenBTW(1000000)).toBe(210000);
});
```
**3. Identificeren van edge cases**
- **Negatieve waarden**: altijd controleren of de functie deze correct afhandelt door een fout te werpen.
- **Zero**: controleren of de uitkomst correct is wanneer bedrag 0 is.
- **Kleine waarden**: zoals 0.0001 of 0.01, om precisie te testen.
- **Grote waarden**: om te voorkomen dat er overflow of precisieproblemen ontstaan.
- **Type testen**: wat gebeurt er als invoer geen getal is? Bijvoorbeeld `null`, `undefined`, of een string.
Bijvoorbeeld:
```js
test('niet-numerieke invoer moet fout geven', () => {
expect(() => berekenBTW('tekst')).toThrow();
});
```
**4. Samenvatting**
- Test normale gevallen
- Test randgevallen zoals 0 en kleine waarden
- Test grote waarden
- Test foutgevallen bij negatieve en ongeldige invoer
Door bovenstaande testgevallen te implementeren, zorg je dat je functie robuust is en correct reageert op alle relevante invoer.
provider: deepseek
model: deepseek-chat
Zeker! Hier is een overzicht voor het testen van je `berekenBTW` functie:
## Testgevallen met uitleg
**1. Normaal geval (positief bedrag)**
```javascript
test('berekent correct BTW voor positief bedrag', () => {
expect(berekenBTW(100)).toBe(21);
expect(berekenBTW(50)).toBe(10.5);
});
```
**2. Edge case: Nul bedrag**
```javascript
test('geeft 0 terug bij bedrag van 0', () => {
expect(berekenBTW(0)).toBe(0);
});
```
**3. Edge case: Negatief bedrag (foutafhandeling)**
```javascript
test('gooit error bij negatief bedrag', () => {
expect(() => berekenBTW(-10)).toThrow('Bedrag mag niet negatief zijn');
});
```
**4. Edge case: Decimale invoer**
```javascript
test('werkt correct met decimale bedragen', () => {
expect(berekenBTW(99.99)).toBeCloseTo(20.9979, 2); // afronding controleren
});
```
## Hoe edge cases identificeren
**1. Grenswaarden analyseren:**
- Net boven/onder 0 (0.01 en -0.01)
- Precies 0
- Grote getallen (mogelijke overflow)
**2. Datatypen overwegen:**
- Wat gebeurt er met strings? (bijv. '100')
- Null/undefined waarden
- Speciale numerieke waarden (NaN, Infinity)
**3. Bedrijfsregels controleren:**
- Is 21% altijd correct? (mogelijk verschillende BTW-tarieven)
- Afrondingsregels (naar boven/onder/bankiers)
## Aanvullende testideeën
```javascript
// Test met zeer kleine positieve waarden
test('werkt met kleine bedragen', () => {
expect(berekenBTW(0.01)).toBeCloseTo(0.0021, 4);
});
// Test precisie en afronding
test('behandelt floating-point precisie correct', () => {
// Voeg specifieke afrondingslogica toe indien nodig
});
```
Gebruik een testing framework zoals Jest en overweeg parameterized tests voor uitgebreide dekking van verschillende waarden!