Софтуерно Инженерство
Loading...
Hristo_Penchev avatar Hristo_Penchev 388 Точки

[Homework] Testing Web Services Problem 3 - Валидацията на байндинг модела не работи при подаване през тест

Здравейте,

Сблъсквам се със следния казус. Това ми е байндинг моделът за новината:

https://github.com/HPenchev/SoftUni-Projects/blob/master/WebServicesAndClound/WebServicesTesting/News/News.Services/Models/NewsPostBindingModel.cs

Навсякъде съм сложил Required както си му е редът.

Това е контролерът ми:

https://github.com/HPenchev/SoftUni-Projects/blob/master/WebServicesAndClound/WebServicesTesting/News/News.Services/Controllers/NewsController.cs

На 34 ред е методът PostNews

А това е тестът ми на контролера:

https://github.com/HPenchev/SoftUni-Projects/blob/master/WebServicesAndClound/WebServicesTesting/News/News.Controllers.Tests/ControllersTests.cs 

На 84 ред се опитвам да постна новина с липсващо заглавие. И проблемът е, че успявам. Пускам дебъгера и поради някаква причина на контролера изобщо не му дреме, че заглавието липсва и ми дава ModelState = true. Интересното е, че проблемът го има само при юнит тестовете. Когато опитам да подам през постман данни с липсващо заглавие по нормален начин, засича ModelState = false и ми връща код 400. Но си нямам идея на какво се дължи това. Дали някой ще успее да помогне?

Благодаря предварително!

1
C# Web Services & Cloud
aivian avatar aivian 50 Точки

 Някой знае ли как да настроя IHttpActionResult Create() да връща Created()? Опитвам се да направя втория тест на трета задача да проверява дали връща StatusCode - 201 Created, но не знам как да си настроя location - а, който изисква.

0
04/09/2015 20:39:29
a.angelov avatar a.angelov 1331 Точки

Аз съм го направил така - връща url и самата новина:

return this.Created("api/news/" + newNews.Id, newNews);

 

2
a_rusenov avatar a_rusenov 1103 Точки

Има и друг вариант - подаваш името на route от WebApiConfig и то автоматично ще построи location:

return this.CreatedAtRoute(
    "DefaultApi",
    new { id = data.Id }, 
    data);

DefaultApi отговаря на "api/{controller}/{id}".

1
aivian avatar aivian 50 Точки

С на aangelov начина се получи, и теста мина. Когато ползвам DefaultApi, нормална заявка минава и връща 201, но не мога да тествам - кара ми се по следния начин "A route named 'DefaultApi' could not be found in the route collection. Нямам идея защо прави така, може би защото е мокнато.

0
fricer avatar fricer 23 Точки

И аз имах същия проблем. Пробвай така:

return CreatedAtRoute("DefaultApi", new { controller = "ControllerName", id = data.Id }, data);

smiley

2