You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week2/testen_mocks.md
+16-2
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,8 @@ Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opm
8
8
9
9
## Create Mock
10
10
11
+
Wat is een Mock in #unit-testing? Een Mock is ervoor zorgen dat je niet afhankelijk bent van andere classen en objecten. Je test niet productie #code en dus niet de implementatie. Wat je test is de nabootsing van de methods om bepaald gedrag terug te krijgen. Hieronder zie je een Mock in actie. Je moeten weten hoe je een Mock moet schrijven. Dus niet het Framework: Moq.
12
+
11
13
```C#
12
14
usingSystem.Numerics;
13
15
namespaceTestProject1;
@@ -44,7 +46,13 @@ where T : INumber<T>
44
46
45
47
```
46
48
47
-
Hier komt nog uitleg.
49
+
We maken een #interface ICalculator met een #generics met type #T. Daaraan geven we twee methods: Add en Substract. Die hebben beide 2 arguments met #T a en #T b. Vervolgens maken we een MockCalculator die de #interface implementeert. We geven een #dynamic c die we vullen met waarde a. Vervolgens returnen we die c en b. Hierboven zie je hoe dat gebeurd.
50
+
51
+
Nadat we de Mock hebben, maken we een #class / #struct met de daadwerkelijke implementatie. We maken een Calculator en in de #Primary-Constructor geven we de #interface mee met iCalculator argument. Dit is #Dependency-Injection . Je implementeert niet de #interface, maar geeft dit als waarde mee.
52
+
53
+
De MockCalculator die de #interface implementeert is #Dependency-Inversion. Terug naar Calculator. De argument die meegegeven is een #interface-Injection en de #Property een #setter-Injection. Die is #readonly en #private. We willen niet de Mock implementatie aanroepen. Je ziet ook een #generics constraint met where #T : #INumber #T.
54
+
55
+
Nu is het alleen mogelijk om arithmatic getallen eraan mee te geven. Als laatste hebben we de twee methods die we in de test gaan gebruiken. De implementatie lijkt bijna hetzelfde als de #interface , maar we kunnen de namen van die method voor de => aanpassen. Voor het gemak laten we het zoals het is. #generics types zijn optioneel. Het is geen requirement voor een Mock.
48
56
49
57
## Test Mock
50
58
@@ -84,4 +92,10 @@ public class TestCalculator
84
92
85
93
```
86
94
87
-
Hier komt ook wat uitleg later.
95
+
Laten we nu naar de tests gaan. De best practice voor een test is maximaal 1 #assert per method. Hoe je je methods en #class noemt is aan jou, maar houdt het simpel. We hebben een TestCalculator #class en twee methods. Beide zijn het van het type #void en ze heten: TestAdd en TestSubstract. Je kunt met data annotaties #Fact of #Theory je test maken.
96
+
97
+
We maken een nieuw object van MockCalculator met het type #u32 / #uint. Daarna maken we ook een nieuw object aan van Calculator met hetzelfde type. Daar gooien we de mock in. Hierbij wordt #Dependency-Injection toegepast. Het is slim om de test op te delen met de 3 AAA's. Arrange, Act en Assert. In Arrange maak je nieuwe objecten aan. In de Act set je de waardes.
98
+
99
+
In de Assert test je hetgeen dat je wilt testen. Er zijn verschillende methods die je kan gebruiken om te testen, maar we zullen dat niet behandelen hier. Speel daar zelf mee. Equal en True zul je het meest gebruiken. We roepen in de Act de method aan die we willen gebruiken. Add of Substract. Hier geven we de waardes mee. Vervolgens testen we die. De test slaagt, congrats!
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week3/async_(en_functioneel)_programmeren.md
+157-3
Original file line number
Diff line number
Diff line change
@@ -1,3 +1,5 @@
1
+
> Note: Functioneel programmeren met #delegate en Func<> zullen niet worden beschreven.
2
+
1
3
# Intro
2
4
3
5
Hier vind je de onderdelen van lesweek3. Alles wat je moet weten van deze week wat ook in het #toetsmatrijs staat beschreven. Als er een stukje staat met dat er nog later uitleg komt, dan vul ik dat later in. Er is geen garantie dat #code perfect is. Daar gaat het niet om. Als je de #code shit vindt, dan snap je niet het punt, want het gaat puur om het concept.
@@ -6,14 +8,20 @@ Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opm
6
8
7
9
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8
10
9
-
## Async programming with Await and Task
11
+
## Async programming with #await and #Task
12
+
13
+
### Async #class Example
14
+
15
+
We hebben hier een DownloadSource #class met 2 methods. Ze lijken beide op elkaar en violaten meerdere #OOP regels, maar das niet belangrijk hier. We maken een DownloadAsync method met het type #Task. Let daarbij op dat async #void geen goeie manier is om een method te maken. Aangezien de #Task een #collection is van asynchroon programmeren.
16
+
17
+
Om asynchroon te kunnen programmeren, gebruiken we het keyword: async. Bij synchroon programmeren wordt alles tegelijk uitgevoerd. Bij Asynchroon heb je verschillende #threads die anders om gaan met bepaalde taken. We printen de eerste #Console regel uit. Daarna voeren we de regel uit: #await #Task .Delay(3000). Hierdoor wacht het programma 3 seconden lang.
10
18
11
19
```C#
12
20
namespaceConsoleApp3;
13
21
14
22
publicclassDownloadSource
15
23
{
16
-
privateconstintTOTAL=50;
24
+
privateconstintTOTAL=50; //const to be used for this program.
17
25
18
26
publicasyncTaskDownloadAsync()
19
27
{
@@ -67,7 +75,41 @@ public class DownloadSource
67
75
68
76
```
69
77
70
-
Hier zal later wat uitgelegd worden. Alhoewel beide methodes bijna precies op elkaar lijken, gaat het hier niet om of de code perfect is en aan alle principes van OOP voldoet, het gaat om de concepten. En deze keer is dat voor week3 async/await/Task.
78
+
We zijn niet verplicht om #await ervoor te zetten, maar de waarschuwing geeft het volgende aan: <spanstyle=color:#FFA500>Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.</span> Daarna maken we een nieuwe #List aan met een #List Initializer met de waarde: "Downloading from Source".
79
+
80
+
We maken ook een variabele aan met type #var waarin een #Enumerable Range tussen de 0-50 zit. Die wordt 50x aangeroepen in de #foreach loop. Vervolgens maken we een result #var aan met een #Task .Run. Hierin voeren we de code welke we willen runnen. We gebruiken #linq met de #Select #OrderBy en de #ToList. In de #Select maken we een anonieme type.
81
+
82
+
Deze bevat de #key-value variant en die geven we mee aan de #Properties . Om #side-effects te voorkomen zetten we de #foreach #linq apart neer. Daarin zetten we de taken uit de #List neer met het nummer 1 tot en met 50. Een index begint met 0, dus tellen we er 1 bij op. Als laatste roepen we #Task.Delay(150).Wait() aan.
83
+
84
+
Als je de .Wait() weghaald, dan zullen alle elementen tegelijk op het scherm komen, desondanks dat de #Task .Run awaited wordt. De SourceAsync method heeft dezelfde opbouw, dus dat is eigenlijk precies hetzelfde, alleen zijn er wat namen anders en voegen we een #Random toe met #Next. Daarbij krijg je een random getal tussen 1-50.
85
+
86
+
>Dit heb ik gedaan om het downloaden te simuleren en de processen komen 2x zo snel. Daarna stopt het programma.
87
+
88
+
### #Task #List All
89
+
90
+
> Hier vind je de volledige lijst van de #Task methods die er zijn. Er zijn er in totaal 15.
91
+
92
+
```C#
93
+
CompletedTask//Task
94
+
CurrentId//int?
95
+
Factory//TaskFactory
96
+
Delay//Task
97
+
FromCanceled<>//Task<TResult>
98
+
FromCanceled//Task
99
+
FromException//Task
100
+
FromException<>//Task<TResult>
101
+
FromResult//Task<TResult>
102
+
Run//Task
103
+
WaitAll//void
104
+
WaitAny//int
105
+
WhenAll//Task
106
+
WhenAny//Task<Task>
107
+
Yield//YieldAwaitable
108
+
```
109
+
110
+
> Je hoeft niet alles uit je hoofd te kennen. Waarschijnlijk zul je zelf maar maximaal 3 nodig hebben. Delay, Run en CompletedTask gebruik je het meest. Maar FromResult kan handig zijn als je in een synchroon programma werkt, waarin je niet met async en #await bezig bent.
111
+
112
+
### Running Main Program
71
113
72
114
```C#
73
115
namespaceConsoleApp3;
@@ -84,3 +126,115 @@ public class Program
84
126
}
85
127
86
128
```
129
+
130
+
> Hier roepen we de objecten aan. Nadat de downloads klaar zijn, zie je: Awaiting processes... verschijnen. Dit heeft een vertraging van 1,5 seconden.
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week5/internet.md
+2
Original file line number
Diff line number
Diff line change
@@ -5,3 +5,5 @@ Hier vind je de onderdelen van lesweek5. Alles wat je moet weten van deze week w
5
5
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
6
6
7
7
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8
+
9
+
## <spanstyle="color:#FF0000">Waarschijnlijk kom ik hier niet aan toe.</span>
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week6/api.md
+2
Original file line number
Diff line number
Diff line change
@@ -5,3 +5,5 @@ Hier vind je de onderdelen van lesweek6. Alles wat je moet weten van deze week w
5
5
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
6
6
7
7
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8
+
9
+
## <spanstyle="color:#FF0000">Waarschijnlijk kom ik hier niet aan toe.</span>
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week7/specflow.md
+4
Original file line number
Diff line number
Diff line change
@@ -5,3 +5,7 @@ Hier vind je de onderdelen van lesweek7. Alles wat je moet weten van deze week w
5
5
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
6
6
7
7
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
0 commit comments