2. Hoeveel van jullie hebben
automatische tests ingericht op jullie
project?
3. SpecFlow is een framework om
leesbare tests te schrijven
‘SpecFlow’ test
1. Setup
2. Execution
3. Assertion
Een test heeft 3 stappen
1. Given a situation
2. When an action is performed
3. Then something happened
In SpecFlow werkt dat zo:
4. SpecFlow scenario’s kunnen
handig per feature worden
ingedeeld
Feature
Scenario A
Scenario B
Scenario C
Opportunity Management
Salesperson can create
a quote for proposal
Salesperson creates an
order after a quote has
been accepted
Sales manager can
view opportunity
pipeline of his
department
5. Achter de SpecFlow scenario’s zit
c# code
• Zet een BindingAttribute boven je class
• Zet 1 of meerdere attributes boven je method
• GivenAttribute, WhenAttribute, ThenAttribute
• De tekst in de attribute wordt gematched met de tekst in het scenario.
• Je kan parameters opgeven door RegEx expressies in je attributes
• De parameters voor je method zijn in volgorde op basis van de attribute
tekst. Waarbij de table altijd achteraan komt
Hoe werkt de koppeling tussen scenario’s en code?
6. Je kan op allerlei manieren
inhaken op SpecFlow
• Zet een Before/After xxxxx attribute boven je method
• Test Run, Feature, Scenario, Block, Step
• Mogelijkheid tot filteren met tags
Hooks
• Voeg een parameter toe aan je constructor
• Object wordt door SpecFlow geïnstantieerd
• De scope van het object is een scenario
Dependency Injection
• Op basis van Tags een transformatie uitvoeren op je
app.config
• Bijvoorbeeld de browser laten wisselen op basis van tags
App.config transformaties
7. Er zijn libraries beschikbaar
• SpecFlow helper library
• SpecFlow library voor CRM
• Nuget: ‘Vermaat.Crm.Specflow’
• https://github.com/mVermaat/Crm.Specflow
• EasyRepro
• UI Testing library voor CRM (vanaf 8.1)
• Nuget: ‘Dynamics365.UIAutomation.Api’
• https://github.com/Microsoft/EasyRepro
8. Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
Given a {entityname} named {alias} with the following
values
• EntityName bepaald het type records
• Alias wordt gebruikt om naar dit record te
refereren in volgende stappen
• De table bevat een lijst met de attributen van het
record.
• De CRM metadata API wordt gebruikt om display
names om te zetten naar technische namen
Given
9. Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
When {alias} is updated with the following values
• Meestal moet je een record updaten dat je in je
setup gemaakt hebt. Je kan simpel via het alias
refereren naar welk record je wilt updaten
• De tabel bepaald welke velden worden aangepast
• De CRM metadata API wordt gebruikt om display
names om te zetten naar technische namen
When
10. Met een paar simpele stappen
kan je de meeste scenario’s al
afdekken
Then an {entityname} exists with the following values
• Controleren of er een bepaald record besaat in
CRM
Then
Then {alias} has the following values
• Controleren of een record dat eerder in de tests
gebruikt is nu een aantal specifieke waardes heeft
Then
11. Soms moet/wil je specifieke
stappen schrijven
• Voor speciale acties in CRM zoals het kwalificeren
van leads of het sluiten van opportunities
• Wanneer je een set van stappen heel vaak
herhaalt in verschillende tests
• Bijvoorbeeld het opzetten van een account
met een set van opportunities, quotes en
orders
• Te veel stappen zorgt voor onderhoudsproblemen
en het maakt het lastig om de goede stap te
bepalen bij het schrijven van tests.
Wanneer schrijf ik specifieke stappen?