Ho provato a farlo e ho effettuato molte ricerche su google/stackoverflow senza fortuna.ModelState.IsValid sempre true durante il test del controller in Asp.Net MVC Web Api
Ho un semplice modello:
public class MovieModel
{
public string Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
}
Metodo nel controller:
// POST: api/Movies
public IHttpActionResult Post([FromBody]MovieModel movieModel)
{
if (ModelState.IsValid)
{
//Code
}
}
E un metodo di prova (è un test di integrazione, ma lo stesso sarebbe accaduto in unit test):
[TestMethod]
public void MoviesController_Post_Without_Name()
{
// Arrange
var model = new MovieModel();
model.Name = "";
// Act
var result = controller.Post(model);
// Assert
Assert.IsInstanceOfType(result, typeof(InvalidModelStateResult));
Assert.AreEqual(6, controller.Get().Count());
}
Nonostante il modello sia chiaramente non valido, valuta sempre la proprietà IsValid su true.
Ho provato molti approcci finora senza successo.
Ho provato questo metodo .Validate prima, ma non esiste. Sto usando MVC 5. –
Il riferimento Microsoft mostra il metodo Validate, per la versione 5 di MVC, ma semplicemente non funziona, né Intellisense né build funzionano. –
@ AndréBaptista Perché parli di MVC? 'ApiController' è una classe API Web e si trova in' System.Web.Http'. Assicurati di aver aggiunto i pacchetti NuGet corretti al progetto di test. –