Help me een uitgebreide testset maken voor mijn nieuwe functie.
description
Door deze prompt te gebruiken, creëert u een robuuste testset die de betrouwbaarheid van de code verbetert, het onderhoud vergemakkelijkt en de kans op bugs in productie vermindert.
prompt
try_prompt
Ik ontwikkel een nieuwe functie in mijn applicatie en heb hulp nodig bij het maken van een uitgebreide eenheidstestset. Geef aanbevelingen over hoe ik mijn tests moet ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier zijn uitgebreide aanbevelingen voor het structureren van je eenheidstestset voor de gebruikersregistratiefunctie, inclusief suggesties voor scenario's en randgevallen:
**Structuur van de Tests:**
1. **Testcategorieën:**
- Validatie van invoergegevens
- Functionele logica
- Foutafhandeling
- Randgevallen en grenswaarden
- Integratie (indien van toepassing)
2. **Testbestanden en -modules:**
- Scheid tests per functionaliteit of validatiepunt
- Gebruik duidelijke naamgeving, bv. `test_register_valid_input.py`, `test_register_invalid_email.py`
3. **Testmethoden:**
- Elke test moet één specifiek scenario behandelen
- Gebruik setup- en teardown-methoden indien nodig voor voorbereiding en opruiming
---
**Te dekken Scenario's:**
1. **Valid Invoer:**
- Correcte e-mail en wachtwoord die voldoen aan alle eisen
- Test of registratie succesvol is en de juiste gegevens worden opgeslagen
2. **Ongeldige e-mailadressen:**
- Geen '@' teken
- Geen domeinnaam
- Lege e-mail
- Onjuiste formaten (bijv. 'abc@com', 'abc@.com')
3. **Ongeldig wachtwoord:**
- Te kort (bijvoorbeeld minder dan 8 tekens)
- Geen hoofdletters, kleine letters, cijfers of symbolen indien vereist
- Leeg wachtwoord
4. **Herhaalde registratie:**
- E-mail die al bestaat in de database
- Controle of duplicates worden afgehandeld met juiste foutmelding
5. **Randgevallen en grenswaarden:**
- E-mail met minimale/maximale lengte
- Wachtwoord met minimale/maximale lengte
- Speciale tekens in e-mail en wachtwoord
6. **Foutafhandeling:**
- Databasefout (bijv. verbindingsproblemen)
- Onverwachte exceptions
7. **Beveiliging en validatie:**
- Cross-site scripting (XSS) of injection-voorbeelden in input
- Verifiëren dat wachtwoorden correct worden gehasht en opgeslagen
---
**Zorgen dat alle randgevallen worden overwogen:**
- Gebruik data-driven testing: definieer een reeks testgegevens inclusief randgevallen
- Maak gebruik van mocking/stubbing voor externe afhankelijkheden (zoals database)
- Test zowel succesvolle als mislukte cases
- Documenteer alle scenario's zodat geen enkele belangrijke variatie wordt overgeslagen
- Overweeg het gebruik van testtools of frameworks die property-based testing ondersteunen voor het genereren van random input
---
**Aanvullende Tips:**
- Automatiseer je tests zodat ze bij elke codewijziging kunnen worden uitgevoerd
- Gebruik duidelijke asserties en controleer niet alleen op succes, maar ook op correcte foutmeldingen
- Test ook de gebruikerservaring: bijvoorbeeld of foutmeldingen duidelijk en behulpzaam zijn
Door deze gestructureerde aanpak zorg je dat je registratiefunctie betrouwbaar, veilig en robuust is onder alle omstandigheden.
provider: deepseek
model: deepseek-chat
Zeker, hier is een uitgebreide handleiding voor het opzetten van eenheidstests voor je registratiefunctie in het Nederlands:
## Teststructuur
```java
// Voorbeeld indeling (pseudocode)
class UserRegistrationTest {
// Testgevallen per categorie
void testSuccesvolleRegistratie() { ... }
void testEmailValidatie() { ... }
void testWachtwoordSterkte() { ... }
void testRandgevallen() { ... }
void testIntegratieScenario() { ... }
}
```
## Testscenario's per categorie
### 1. **Succesvolle registratie**
- Geldig e-mailadres + sterk wachtwoord
- Controleer of gebruiker correct wordt aangemaakt
- Verifieer dat wachtwoord gehashed wordt opgeslagen
- Bevestig dat juiste succesresponse wordt teruggegeven
### 2. **E-mail validatie**
```java
// ONGELDIGE EMAILS
testRegistratieMetOngeldigeEmail("geen-email") → moet falen
testRegistratieMetOngeldigeEmail("geen@") → moet falen
testRegistratieMetOngeldigeEmail("@domein.nl") → moet falen
testRegistratieMetOngeldigeEmail("test@onvolledig") → moet falen
// SPECIAAL GEVAL
testRegistratieMetBestaandeEmail("bestaat@al.nl") → moet "email bestaat al" error geven
```
### 3. **Wachtwoordsterkte**
```java
// TE KORT
testWachtwoordTeKort("Ab1!") → moet falen (minimaal 8 karakters)
// ONVEILIG
testWachtwoordZonderHoofdletter("abc123!@#") → moet falen
testWachtwoordZonderCijfer("Abcdefg!") → moet falen
testWachtwoordZonderSpeciaalKarakter("Abcdefg123") → moet falen
// GELDIG
testWachtwoordGeldig("VeiligWacht123!") → moet slagen
```
### 4. **Randgevallen en edge cases**
```java
// LEGE INPUT
testRegistratieMetLegeEmail("") → moet falen
testRegistratieMetLeegWachtwoord("") → moet falen
// WHITESPACE
testRegistratieMetSpaties(" test@email.com ") → trimmen of falen?
testWachtwoordMetSpaties(" Wacht123! ") → accepteer of weiger?
// LANGE INPUTS
testExtreemLangeEmail(256+ karakters) → moet falen
testExtreemLangWachtwoord(128+ karakters) → limiet nodig?
// SPECIALE KARAKTERS
testEmailMetUnicode("tést@email.com") → accepteer?
testWachtwoordMetUnicode("Pässwörd123!") → beleid?
// NULL VALUES
testRegistratieMetNullEmail(null) → duidelijke foutmelding
testRegistratieMetNullWachtwoord(null) → duidelijke foutmelding
```
### 5. **Beveiligingsscenario's**
```java
// SQL INJECTION
testRegistratieMetSQLInjectionEmail("test@email.com'; DROP TABLE users;--") → moet falen
// XSS
testRegistratieMetXSSEmail("test<script>alert()</script>@email.com") → moet falen
// BRUTE FORCE BESCHERMING
testTeVeelRegistratiePogingen() → rate limiting testen
```
### 6. **Integratietests**
```java
// DATABASE INTERACTIE
testDatabaseLockBijGelijktijdigeRegistratie() → concurrentie test
// EXTERNE SERVICES
testEmailVerificatieWordtVerstuurd() → mock email service
// PERFORMANCE
testRegistratieBinnenAcceptabeleTijd() → timeout test
```
## Teststrategie tips
### 1. **Test Pyramid**
- 70% Unit tests (individuele functies)
- 20% Integration tests (database, services)
- 10% E2E tests (volledige registratieflow)
### 2. **Test Data Management**
```java
// Gebruik test factories
User createValidTestUser() {
return new User("test@example.com", "VeiligWacht123!");
}
// Cleanup na tests
void cleanupTestUsers() { ... }
```
### 3. **Mocking Strategy**
```java
// Mock externe dependencies
@Mock EmailService emailService;
@Mock UserRepository userRepository;
// Test isolatie garanderen
void setUp() {
resetAllMocks();
}
```
## Aanbevolen test coverage
- **Minimaal 90% code coverage**
- 100% voor kritieke paden (wachtwoord hashing, email validatie)
- Alle error scenarios gedekt
- Boundary values getest
## Continuous Integration
- Tests automatisch runnen bij elke commit
- Coverage rapporten genereren
- Performance tests in aparte pipeline
Door deze structuur te volgen zorg je voor een robuuste testset die alle belangrijke scenario's dekt en toekomstige bugs voorkomt. Succes met de implementatie!

