Open karelg opened 6 years ago
Andmebaasiga suhtlus peaks olema ära mockitud. https://en.wikipedia.org/wiki/Mock_object
Jah, aga kuidas seda saavutada?
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.
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
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.
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.
https://github.com/kkorvel/AgileWorksWebAppeals/blob/d8f7e5fdc16cff78d097ddf6c88b32ff562c1fcb/AgileWorksSolution/AgileWorks.Tests/Controllers/AppealsControllerTests.cs#L14