kkorvel / AgileWorksWebAppeals

0 stars 0 forks source link

Praegi siin on kõik integratsiooni testid, aga kui me tahaks üksustestida seda klassi, siis mis kuidas seda saavutada? #14

Open karelg opened 6 years ago

karelg commented 6 years ago

https://github.com/kkorvel/AgileWorksWebAppeals/blob/d8f7e5fdc16cff78d097ddf6c88b32ff562c1fcb/AgileWorksSolution/AgileWorks.Tests/Controllers/AppealsControllerTests.cs#L14

kkorvel commented 6 years ago

Andmebaasiga suhtlus peaks olema ära mockitud. https://en.wikipedia.org/wiki/Mock_object

karelg commented 6 years ago

Jah, aga kuidas seda saavutada?

kkorvel commented 6 years ago

Et andmebaasi ühendus ära mockida, siis oleks vaja projekti lisada Repositorid ja Interfaced, mille kaudu käib siis kogu appealide loogika, ehk siis lisamine, kustutamine, kuvamine. Pärast seda saab testmise klassis mockida ära Repository ning läbi selle välja kutsuda meetod, näiteks kõige appealide küsimiseks. Kontrollerisse antakse ära mockitud objekt ning pärast seda kontrollitakse vastavalt Assertiga, kas vastav objekt on olemas või ei ole.

Uurisin selle mockimise kohta väga palju, üks allikatest on siin Youtube videona: https://www.youtube.com/watch?v=Krj3-h198KQ

Projekti pole mõtet vast ümber tegema hakata, kuna alguses sain ka aru, et see on okei, kui sellise väikese projekti struktuuris ei ole repository patternit sees.

karelg commented 6 years ago

Tegelikult ei ole vaja selleks repository mustrit juurde tuua, saab mockida ka EF dbcontext'i. Põhiline eeldus siin ikkagi on see, et me kasutame Dependency injection'it

karelg commented 6 years ago

Ja soovitan tutvust teha ka juba DI conteineritega https://www.martinfowler.com/articles/injection.html Muide uues ASP.NET Core's on juba sissehitatud DI koneiner.

kkorvel commented 6 years ago

Selge, olen proovinud siin nii ja seda pidi, miskipärast ei hakka see EF dbcontexti mockimine tööle, kasutades Dependency Injectionit. Olen uurinud palju materjale: https://stackoverflow.com/questions/25960192/mocking-ef-dbcontext-with-moq/30154415 https://blog.learningtree.com/mock-entity-frameworks-dbcontext-unit-testing/ https://www.codeproject.com/Tips/1081815/Mocking-EF-DbContext Aga proovin veel edasi. Äkki hakkab tööle.