-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnotes.txt
118 lines (80 loc) · 4.96 KB
/
notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
************************************
------- ProjectWebAPI-.NET 7 -------
- solution -> add new project -> xUnit Test Project -> Naziv.Tests
pokreces u Visual Studio sa:
> Test
> Run All Tests
- nove klase
- NazivControllerTests.cs
- NazivServiceTests.cs
- NazivRepositoryTests.cs
naming test metode ide:
- ImeKontrolera_ImeMetodeUkontroleru_ReturnWhat()
- za prvi unittest koristim FakeItEasy jer pratim tutorial, prvo da osposobim sve a onda cu isprobavati druge stvari
- install nuget package u WebAPI.Tests > FakeItEasy
- Dependency injection izgleda ovako za npr kontroler test:
private readonly StudentController _controller;
private readonly IService _service;
public StudentControllerTests()
{
_service = A.Fake<IService>(); //FakeItEasy
_controller = new StudentController(_service); // SUT, system under test
}
- u biti nije problem samo testiranje po sebi, nego znati sto ima smisla testirati a sto ne
- u kontroleru, uglavnom metoda returna tri moguca rezultata - success, fail i exception
- tako da testiram barem to
- u servisu sam stvarno minimalno, samo provjera za return true, nista greske i exceptioni, puno je za sad
- za repository ja malo drugacije jer sad baratam sa DbContext
- fejkam i DbSet
- pravim novu klasu AsyncHelper jer fejkanje DbSeta ne zna hendlat async
- automapper pravi probleme
- za get all morao u repositoriju rucno mapirat da magicno proradi
- isto za get all sa parametrimas
- async jako pravi probleme
- za getonebyId u repositoriju morao maknuti await Context.Students.FirstOrDefaultAsync i staviti sinkrono
- za params isto moram maknuti await i ToListAsync u ToList a npr za getall nisam morao
- kod filtriranja pravi probleme oko malog i velikog slova, iako SwaggerUI nije
- za repository promijenio s.LastName.Contains(lastName) u s.LastName.ToLower().Contains(lastName.ToLower()))
************************************
------- ProjectMVC-.NET 7 -------
- razlika u kontroleru
- new xUnit project, .NET 7
- fakeiteasy
- get metode nemaju bas sta za testirati, ali dalje ove da
- create i edit imaju vise returnova pa se vise toga da testirati
- delete ovdje konkretno u kontroleru nije imao fail ili exception pa je jednostavniji neg moze bit
- otkrio da u listwithparams moj search nije bio case insensitive, pa prilagodio
- _output je fora
- automapper pravi probleme testu, MVC radi oke i sve dobro mapira, ali iz nekog razloga za test ne mapira, tako da sam morao rucno mapirati radi testa
- u biti, guglanje kaze da je problem oko konflikta EF Core in-memory db i Automapperov projectto
- ListWithParams se bas lijepo da testirati
*********************************************
------ PlayPalMini-WebAPI-.NET 4.7.2 --------
- add new Unit Test Project (.NET Framework)
- add new Basic Unit Test
- instaliram Moq umjesto FakeItEasy u Tests projekt za fejkanje
- napravio HelperClass i stavio GetFakeStudents tamo da ne moram kopirati u svaki test
- treba [TestInitialize] na pocetku, slicno kao DI s xUnitom
public void Setup()
{
- nesto se bunio, bacao errore, resolvo sam sa desni klik i use local version 5.2.9
- u nuget paketima vidim da je Microsoft.AspNet.WebApi 5.2.9, ali to je bilo i prije (provjerio na kopiji projekta bez testova) tako da neznam sta je promjenio
- umjesto _output jednostavno Console.WriteLine() za debug poruke :D
- u ControllerTests > CreateAsyncTests > OnSuccess_ReturnMessage_Created() fora sa navodnicima, faila test jer ne cita navodnike a kao treba, rjesio sa "\"Created!\""
- shvatio da, ako u kontroleru nema nikakva sorting, paging, filtering logika, slati fakeList kroz kontroler nece suziti listu, i ako budem u testu rucno sortirao i sta ti ja znam, nikad nece biti match, pa tako ni pass
- nego onda sta jedino mogu je fakeListu u startu fejk suziti po parametrima, i to onda slati u kontroler, ali onda nece imat smisla ponovo rucno npr sortirati i sl, kad bi to znacilo da usporedjujem dvije liste koje sam obje ja rucno podesio
- a to sam radio sad vidim u webapi .net7 testovima u kontroleru
- eto nesto sam naucio xD
- kasnije skuzio da sam to i tu ponovio za params
- repository layer, klasika, ima malo kompliciraniju inicijalizaciju, ali se rijesi - desni klik automapper install local version, i ovo sa kontekstima i dbsetom desni klik pa Using sta vec treba i rjeseno
- dodao CreateMockDbSet u helper classu od ranije radi preglednosti i DRY (dont repeat yourself)
- kopirao fake studente ali Student tip a ne StudentDTO, za fejkanje DB liste
- async klasika pravi probleme negdje, u testu moze ostati ali u repositoriju ne
- zanimljivo kako za edit taj async ne pravi problem
*********************************************
------ PlayPalMini-MVC-.NET 4.7.2 --------
- samo cu kontroler testove
- instaliram Moq u Mvc.Tests
- trazit ce automapper, mvc i pagedlist instalaciju, pa desnim klikom install local version i rjeseno
- zanimljivo da za get all se nije async bunio
- al ga je edit zakomplicirao