2015-02-26 17 views
6

Sto eseguendo un test unitario del mio itinerario PostMyModel. Tuttavia, all'interno di PostMyModel() ho utilizzato la riga Validate<MyModel>(model) per riconvalidare il mio modello dopo che è stato modificato. Sto usando un contesto di test, in modo da non dipendere dal db per i test unitari. Ho inviato il contesto di prova e il metodo post qui sotto:Convalida esito negativo in test unità

test Contesto

class TestAppContext : APIContextInterface 
    { 

     public DbSet<MyModel> MyModel { get; set; } 

     public TestAppContext() 
     { 
      this.MyModels = new TestMyModelDbSet(); 
     } 

     public int SaveChanges(){ 
      return 0; 
     } 
     public void MarkAsModified(Object item) { 

     } 

     public void Dispose() { } 

    } 

Messaggio Metodo

[Route(""), ResponseType(typeof(MyModel))] 
     public IHttpActionResult PostMyModel(MyModel model) 
     { 
      //Save model in DB 
      model.status = "Waiting"; 
      ModelState.Clear(); 
      Validate<MyModel>(model); 

      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.MyModels.Add(model); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateException) 
      { 
       if (MyModelExists(model.id)) 
       { 
        return Conflict(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return CreatedAtRoute("DisplayMyModel", new { id = model.id }, model); 
     } 

Quando la linea Validate<MyModel>(model) corre, ottengo l'errore:

System.InvalidOperationException: ApiController.Configuration must not be null. 

Come posso correggerlo?

risposta

15

Per eseguire il comando Validate, è necessario utilizzare HttpRequest fittizio associato al controller. Il codice per farlo è sotto. Ciò simulerà una HttpRequest predefinita, che in questo caso è abbastanza inutilizzata, consentendo il test dell'unità.

HttpConfiguration configuration = new HttpConfiguration(); 
      HttpRequestMessage request = new HttpRequestMessage(); 
      controller.Request = request; 
      controller.Request.Properties["MS_HttpConfiguration"] = configuration; 
+2

potrebbe essere più semplice con: controller.Request = new HttpRequestMessage(); controller.Request.Properties ["MS_HttpConfiguration"] = new HttpConfiguration(); – ccook

Problemi correlati