Les 7 - Geautomatiseerd testen

De originele lesplanning aanpassen
  • We wijken af van de originele planning








  • We zoeken naar iets wat redelijk 'Future Tech' is, maar wel NU praktisch inzetbaar
  • Daarom schuiven we alle lessen door en gaan we kijken naar een nieuw onderwerp...
1 / 39
suivant
Slide 1: Diapositive
Applicatie- en mediaontwikkelaarMBOStudiejaar 2

Cette leçon contient 39 diapositives, avec quiz interactifs et diapositives de texte.

time-iconLa durée de la leçon est: 30 min

Éléments de cette leçon

De originele lesplanning aanpassen
  • We wijken af van de originele planning








  • We zoeken naar iets wat redelijk 'Future Tech' is, maar wel NU praktisch inzetbaar
  • Daarom schuiven we alle lessen door en gaan we kijken naar een nieuw onderwerp...

Slide 1 - Diapositive

De lessen 20 t/m 24 omvatten het zelf uitzoeken van toekomstige technologieën en eventueel ruimte om zelfstandig te werken aan eigen projecten.
Python intro
Programming basics-II
Les 3 / Week 7a
Geautomatiseerd testen
FUT: Future Tech
Les 7

Slide 2 - Diapositive

Cet élément n'a pas d'instructions




Doelen:
  • We begrijpen de basistheorie van geautomatiseerd testen
  • We herkennen verschillende soorten automatische tests
  • Praktisch geoefend met het schrijven en uitvoeren van unit tests.






Planning:
  • Theorie
  • C# MSTest (praktische demonstratie Unit Testing)
  • Oefenen (praktisch) met MSTest
Deze les

Slide 3 - Diapositive

Let op, voorbereiding van materiaal noodzakelijk:
1. Druk het document 'Retrospective_een_aantal_vormen.docx' af, zodat er voor iedere groep 1 A4 met een opdracht beschikbaar is
2. Verzamel groot papier (A3 of groter) waarop de groepen kunnen werken
3. Teken op het grote papier alvast de in het retrospective document genoemde tekeningen.

Tijdens de les:
1. Geef toelichting over de verschillende vormen
2.  Leg uit dat dit normaal door de scrum master wordt georganiseerd. Dit is iemand die aan het begin van het project wordt gekozen. Zometeen kiest de docent iemand (en alleen voor de retro)
3. Geef ieder groep een andere vorm van retrospective. Op deze manier kunnen in toekomstige groepen verschillende vormen worden ingezet.
4. Maak in ieder groepje 1 iemand scrum-master. Die gaat verantwoordelijk zijn voor een gestructureerd proces, door collega's eraan te herinneren. Let wel: ieder groepslid doet evenveel mee aan de retro.
Geautomatiseerd testen

Slide 4 - Carte mentale

Cet élément n'a pas d'instructions

Voorbeelden

Slide 5 - Diapositive

Cet élément n'a pas d'instructions

https://github.com/luttje/Key2Joy

Slide 6 - Diapositive

Tim heeft een open-source applicatie 'Key2Joy', waarmee met Keyboard en Muis gedaan kan worden alsof er een Game controller is verbonden. Je kunt ermee instellen dat W-A-S-D bijvoorbeeld de linker stick op de controller beweegt.
Werken hieraan vindt hij leuk, maar het is frustrerend om steeds alle hoeken en gaten van de applicatie te moeten testen, als hij weer iets toevoegt. Dat kost tijd en is het minst interessante aan het werk.
Om te helpen heeft hij automatische tests geschreven. Die doen wat hij normaal handmatig zou doen, of testen zelfs op methode-niveau of op basis van bepaalde input, de gewenste output verschijnt.
https://github.com/luttje/videobrew/

Slide 7 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Wat is handmatig testen?

Wat is geautomatiseerd testen?

Voordelen van geautomatiseerd testen.

Slide 8 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Wat is handmatig testen?

Slide 9 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Wat is handmatig testen?
"Werkt het bewerken van handleidingen nog?"
Stap 1: Start de applicatie
Stap 2: Ga naar het overzicht van handleidingen
Stap 3: Kies een handleiding om te bewerken
Stap 4: Bedenk realistische test-data
Stap 5: Probeer met die data te bewerken
Stap 6: Werkt het allemaal nog?

Deze stappen voer je iedere keer uit als je code aanpast die 'mogelijk' iets te maken heeft met handleidingen of het bewerken ervan.
Een voorbeeld van een 'handleidingen' applicatie.

Slide 10 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Wat is geautomatiseerd testen?

Dezelfde (of meer) tests als bij handmatige tests.

Maar we gebruiken code om die stappen automatisch te doorlopen.

Slide 11 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Wat is geautomatiseerd testen?
Een voorbeeld: "Werkt het bewerken van handleidingen nog?"
We schrijven 1x code die volgende doet:
Stap 1: Start de applicatie
Stap 2: Ga naar het overzicht van handleidingen
Stap 3: Kies een handleiding om te bewerken
Stap 4: Bedenk realistische test-data
Stap 5: Probeer met die data te bewerken
Stap 6: Werkt het allemaal nog?

Dezelfde stappen, maar nu uit te voeren met bijvoorbeeld het commando: "run tests"

Slide 12 - Diapositive

Cet élément n'a pas d'instructions

Basistheorie
Voordelen van geautomatiseerd testen.

Slide 13 - Diapositive

  • Sneller dan manueel testen,
  • Minder werk voor de ontwikkelaar (op lange termijn)
  • Minder foutgevoelig (je vergeet niet de ene keer wel bepaalde invoer te testen, en de andere keer niet). De tests liggen vast
Hoe ziet zo'n automatische test er uit?

Slide 14 - Diapositive

Cet élément n'a pas d'instructions

C#

Slide 15 - Diapositive

Cet élément n'a pas d'instructions

C#
Test Runner
Opruimen na tests
Iedere test is een eigen methode
Met 'Assert' stellen we de positieve situatie vast, waarmee de test geslaagd is.
De tests krijgen een eigen project
C#

Slide 16 - Diapositive

Cet élément n'a pas d'instructions

C#
Test Runner
Opruimen na tests
Iedere test is een eigen methode
Met 'Assert' stellen we de positieve situatie vast, waarmee de test geslaagd is.
De tests krijgen een eigen project
C#

Slide 17 - Diapositive

Cet élément n'a pas d'instructions

C#
Test Runner
Opruimen na tests
Iedere test is een eigen methode
De tests krijgen een eigen project
C#
Met 'Assert' stellen we de positieve situatie vast, waarmee de test geslaagd is.

Slide 18 - Diapositive

Cet élément n'a pas d'instructions

JavaScript / TypeScript

Slide 19 - Diapositive

Cet élément n'a pas d'instructions

C#
JavaScript/TypeScript
met 'Jest'
Test Runner via CMD
Opruimen na tests
Iedere test is een aanroep van de 'it' functie
Met 'expect' stellen we de positieve situatie vast, waarmee de test geslaagd is.
De tests krijgen een map in het project

Slide 20 - Diapositive

Cet élément n'a pas d'instructions

PHP met PHPUnit
Open de documentatie over geautomatiseerd testen in Laravel: https://laravel.com/docs/10.x/testing
👓 Zoek uit: 
Hoe wordt een automatische test geschreven?
Hoe wordt zo'n test uitgevoerd?
Een uitstapje naar PHP en Laravel
Hier gaan we in de les niet mee werken, maar geeft een beeld van de mogelijkheden in andere talen. En zo weet je wat de mogelijkheden voor jullie WEB-collega's zijn.

Slide 21 - Diapositive

Cet élément n'a pas d'instructions

In jouw eigen woorden:
Wat is handmatig testen?

Slide 22 - Question ouverte

Cet élément n'a pas d'instructions

In jouw eigen woorden:
Wat is automatisch testen?

Slide 23 - Question ouverte

Cet élément n'a pas d'instructions

In jouw eigen woorden:
Wat zijn enkele voordelen van automatisch testen?

Slide 24 - Question ouverte

Cet élément n'a pas d'instructions

Soorten geautomatiseerde tests

Slide 25 - Diapositive

Cet élément n'a pas d'instructions

Soorten geautomatiseerde tests
Alle type tests vallen in een van deze twee categorieën:

Functioneel:
Test 'echte wereld' situaties van de software. 
Bijv.: Een Taxi-app als Uber moet gebruikers kunnen verbinden met chauffeurs als aan alle voorwaarden is voldaan.

Niet-functioneel:

Slide 26 - Diapositive

Cet élément n'a pas d'instructions

Soorten geautomatiseerde tests
Alle type tests vallen in een van deze twee categorieën:

Functioneel:
[...]
Niet-functioneel:
Test de beveiliging van de app, snelheid, manier van data opslaan.
Bijv.: De Taxi-app moet snel werken voor gebruikers. De app staat enorm lang actief bij chauffeurs, dat moet zonder problemen gaan. Ook als de chauffeur door een tunnel rijdt moet het systeem blijven werken.

Slide 27 - Diapositive

Cet élément n'a pas d'instructions

Soorten geautomatiseerde tests
Type tests:
  • Unit Tests
  • Feature Tests
  • E2E Tests

Andere types:
Smoke Tests, Integration Tests, Regression Tests, Security Tests,
Performance Tests, Acceptance Tests

Wat weet je al hierover?
Herken je iets?

Slide 28 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks

Slide 29 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks
Je kunt automatische tests volledig zelf schrijven, maar vaak gebruiken we een Framework:
  • MSTest (C#)
  • NUnit (C#)
  • xUnit (C#)
  • Playwright (C#, Python, JavaScript/TypeScript)
  • Jest (JavaScript/TypeScript)
  • Mocha (JavaScript/TypeScript)
  • Cypress (JavaScript/TypeScript)

Slide 30 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks
Het testing framework geeft ons de mogelijkheid om
  • Tests te schrijven
  • Tests uit te voeren ('Test Runner')
  • Testresultaten in te zien

Slide 31 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks
MSTest, NUnit, xUnit, Playwright, Jest, Mocha, Cypress, Pest, PHPUnit

Slide 32 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks
MSTest, NUnit, xUnit, Playwright, Jest, Mocha, Cypress, Pest, PHPUnit
Jest
Mocha

Slide 33 - Diapositive

Cet élément n'a pas d'instructions

Testing Frameworks
MSTest, NUnit, xUnit, Playwright, Jest, Mocha, Cypress, Pest, PHPUnit


Pest
PHPUnit
Of met Laravel:

Slide 34 - Diapositive

Cet élément n'a pas d'instructions

Terminologie

Slide 35 - Diapositive

Cet élément n'a pas d'instructions

Praktische Demonstratie
Tests schrijven en uitvoeren in C#
Met behulp van het testing framework MSTest

Slide 36 - Diapositive

https://github.com/curio-lesmateriaal/tests-demonstratie-gamestore
💻  Clone: https://github.com/curio-lesmateriaal/tests-demonstratie-gamestore (fork is niet nodig, we blijven lokaal werken)
- Volg de instructies in de README.md om het project op te starten

🧪 Voer de tests uit volgens de instructies in de README.md
- Lees het gedeelte onderaan de README eens door over hoe de Unit test tot stand is gekomen.

👷 Verbeter de FormatMoney methode.
- Nu falen er vier tests omdat voor getallen groter dan 999 niet juist een scheidingsteken wordt gebruikt om duizenden te groeperen. We verwachten bijvoorbeeld '1,234.00' in het geval dat de totaal prijs 1234m is.
- Pas de methode in FormatHelper.cs aan, zodat de test slaagt

👷‍♀️ Test meer waardes in de FormatMoney tests
- Voeg ten minste 3 tests toe aan de klasse, waarmee je nog enkele situaties test.

🥼 De code wat aanpassen en zelf tests schrijven
- Nu wordt ergens in de MainWindow.xaml.cs tussendoor 21% btw uitgerekend en toegevoegd aan de totaalprijs. Dit is lastig te testen. Daarbij willen we later producten toevoegen die 9% btw hebben (zoals snacks). (Engels vertaling BTW = VAT)
- Maak een klasse 'VatCalculator' en bouw erin een methode die als invoer krijgt: (decimal price, int vatPercentage = 21)
- Gebruik die methode in de MainWindow.xaml.cs code
- Schrijf tests die de werking van die methode testen
Unit Tests in C# met MSTest

Slide 37 - Diapositive

Cet élément n'a pas d'instructions

Samenvatting

Slide 38 - Diapositive

Cet élément n'a pas d'instructions

Wat hebben we gezien en geleerd?

Slide 39 - Carte mentale

Cet élément n'a pas d'instructions