Loading...
zh.stoqnov avatar zh.stoqnov 103 Точки

Web Services Testing Exercise

Здравейте колеги!

Някой ако може да съдейства - към лаба за тестването стигнах до GetAllAds() теста. Към файла е приложена картинка с незавършен код - където е още първото TODO: Setup mockContext.Ads to return the mocked Ads repository. От доста време го мъча, но явно не съм доразбрал мокването - ако някой го е написал много бих се радвал да приложи кода и ако може с няколко думи да обясни какво по точно се случва. :)

 

Тагове:
0
C# Web Services & Cloud
thepowerof4 avatar thepowerof4 98 Точки

За момента това: http://pastebin.com/pw8ppp12

Не осъзнавате каква "чорба" дробите с тоя лаб, май. Самата концепция за тестване на уеб сървиси ни е нова, а вие решавате, че първото упражнение трябва да се направи използвайки сложна методика с имплементиране на "завъртяни" фалшиви репозиторита, което обърква още повече нещата. И защо да не го "обясните", използвайки спецификите на Moq - нещо напълно непознато (поне за мен, защото бях игнорирал КПК курса, който бяхте набутали сред всичко останло във 2-ро ниво). Ами правя лаб-а, ама всяка стъпка си е малко мъка и бива разрешавана с доста ровене и търсене и време за схващане. Натъпкно е с разни ToDo-та, които нищо не ми говорят в момента. Анемичните примери по лекциите не желая да ги коментирам колко са ми полезни, сещайте се. Фокусът на курса за мен в момента се измести в посока тестване на услугите, вместо самата им имплементация, усещам как прекалено много усилия ще отделя за това.

Какъв беше проблемът да се покаже тестване чрез използване на транзакции (изглежда много елегантно), поне за начало, или пък ако държите на фалшиви репозиторита, то поне да бяхте използвали ръчно създадени мок класове в демонстрациите в лаба. Като схванем концпецията и като и ако му дойде времето, ще подхванем и Moq. В тоя лаб правя прекалено много стъпки насляпо и не съм сигурен, че схващам достатъчно.

Доколкото разбирам, в този курс има хора, прохождащи в ООП. На тях пък не знам как им се струва този лаб :)

Ето това видео обяснява доста от нещата при всяка стъпка: https://www.youtube.com/watch?v=vtlcpibpoIU

P.S. В никакъв случай не искам да кажа, че лабът е едва ли не лош. Тия лабове са много, много полезни, да. Хубаво ще е обаче да се разкара Moq от лаба и да се направят примерите с ръчни мокинг класове, защото спецификата на употребата му пречи на схващането на концепцията. Може да вкарате употребата му като последна стъпка, ако държите на него.

4
31/08/2015 22:38:28
a.angelov avatar a.angelov 1316 Точки

Ето моето решение на лаба ако може да ви бъде полезно /надявам се да съм го направил вярно :)/:

GITHUB

ПС. Честно казано когато ние карахме КПК курса аз също не успях да схвана кой знае колко мокването. Просто си трябва явно време - сега може да се каже, че в доста по-голяма степен ми се изясниха нещата. Отделно искам да кажа, че лаба е много добре подготвен и води страхотно стъпка по стъпка. Въвеждането на тези лабове е много добра практика и от много голяма полза. Директно с домашното /без лаб/ съм сигурен, че голяма част от хората няма да могат да се справят и много неща ще останат неразбрани.

2
31/08/2015 21:47:27
dimityr.jechev avatar dimityr.jechev 198 Точки

The type 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.    D:\SoftUni\WebServices\2. ASP.NET-Web-API-Online-Shop-Skeleton\OnlineShop.Tests\MockContainer.cs    17    51    OnlineShop.Tests

Някой има ли този проблем  ?

 

0
a_rusenov avatar a_rusenov 1103 Точки

Имаш ли го въпросния пакет инстралиран?

0
aivian avatar aivian 51 Точки

Защо когато се опитам да си инстанцирам нов User в тестовия проект, не мога да му задам Username, Email и т.н (полетата, които са на IdentityUser), а само OwnAds (единственото поле, което е зададено в ApplicationUser класа)?

Image: http://i.imgur.com/4qbrzxk.png

0
a_rusenov avatar a_rusenov 1103 Точки

Погледни ApplicationUser модела - той в себе си ги няма тези пропъртита, но трябва да ги получи чрез наследяване.

0
aivian avatar aivian 51 Точки

Да, той си го наследява, понеже скелета си беше даден така. Просто добавих от NuGet - Identity в тестовия проект и се оправи.

0
simeon.georgiev avatar simeon.georgiev 62 Точки

Привет! 

И аз да се включа с един въпрос- POST заявката вкарва Ad в базата, метода за затваряне на обяви също работи и дотам- всеки път ми връща

 "ExceptionMessage": "Object reference not set to an instance of an object.",
    "ExceptionType": "System.NullReferenceException",
    "StackTrace": "   at OnlineShop.Services.Controllers.AdsController.GetAds() in d:\\Coding\\Web Services And Cloud\\2. ASP.NET-Web-API-Online-Shop-Skeleton\\OnlineShop.Services\\Controllers\\AdsController.cs:line 23.

Някои с подобен проблем?

0
a_rusenov avatar a_rusenov 1103 Точки

Трудно някой може да ти отговори. Сложи brakepoint в екшъна, който тестваш, и дебъгни теста. Ще се учудите колко бъгове се намират с помощта на тестове. :)

0
03/09/2015 11:33:55
aivian avatar aivian 51 Точки

След като направя 5 - та задача с Ninject, трия празния конструктор и всички тестове си работят Ok, но като пусна нормална заявка през Postman и ми се скарва, че нямам parameterless constructor. Това поведение нормално ли е?

0
a_rusenov avatar a_rusenov 1103 Точки

Не е нормално, в момента сървисите са ти неизползваеми. Дай да видим кода на Startup.cs класа.

0
aivian avatar aivian 51 Точки

Същият е като на картинката:

http://pastebin.com/i8WtzYJH

0
a_rusenov avatar a_rusenov 1103 Точки

Това е наистина странно, ако може качи си някъде целия solution.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.