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
volgende
Slide 1: Tekstslide
Applicatie- en mediaontwikkelaarMBOStudiejaar 2

In deze les zitten 39 slides, met interactieve quizzen en tekstslides.

time-iconLesduur is: 30 min

Onderdelen in deze les

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 - Tekstslide

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 - Tekstslide

Deze slide heeft geen instructies




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 - Tekstslide

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 - Woordweb

Deze slide heeft geen instructies

Voorbeelden

Slide 5 - Tekstslide

Deze slide heeft geen instructies

https://github.com/luttje/Key2Joy

Slide 6 - Tekstslide

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 - Tekstslide

Deze slide heeft geen instructies

Basistheorie
Wat is handmatig testen?

Wat is geautomatiseerd testen?

Voordelen van geautomatiseerd testen.

Slide 8 - Tekstslide

Deze slide heeft geen instructies

Basistheorie
Wat is handmatig testen?

Slide 9 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

Basistheorie
Voordelen van geautomatiseerd testen.

Slide 13 - Tekstslide

  • 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 - Tekstslide

Deze slide heeft geen instructies

C#

Slide 15 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

JavaScript / TypeScript

Slide 19 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

In jouw eigen woorden:
Wat is handmatig testen?

Slide 22 - Open vraag

Deze slide heeft geen instructies

In jouw eigen woorden:
Wat is automatisch testen?

Slide 23 - Open vraag

Deze slide heeft geen instructies

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

Slide 24 - Open vraag

Deze slide heeft geen instructies

Soorten geautomatiseerde tests

Slide 25 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

Testing Frameworks

Slide 29 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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

Slide 32 - Tekstslide

Deze slide heeft geen instructies

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

Slide 33 - Tekstslide

Deze slide heeft geen instructies

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


Pest
PHPUnit
Of met Laravel:

Slide 34 - Tekstslide

Deze slide heeft geen instructies

Terminologie

Slide 35 - Tekstslide

Deze slide heeft geen instructies

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

Slide 36 - Tekstslide

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 - Tekstslide

Deze slide heeft geen instructies

Samenvatting

Slide 38 - Tekstslide

Deze slide heeft geen instructies

Wat hebben we gezien en geleerd?

Slide 39 - Woordweb

Deze slide heeft geen instructies